我已经设法使用带有 VB.NET 代码的脚本任务从我的 SSIS 包发送电子邮件。我不擅长编写脚本,我基本上是在网上查看各种脚本以使我到达我所在的位置。我遇到的问题是我已经在 BIDS 的 SSIS 包中设置了所有变量,并且在我的包中将它们设置为ReadOnly。
如果我为我的Attachment包变量指定一个值,那么一切正常,但如果我不这样做,那么我的脚本就会失败。当我用我的脚本发送电子邮件时,我并不总是想发送附件。我希望修改代码,以便如果在 BIDS 的 SSIS 包中没有为我的Attachement变量指定值,那么我的脚本任务只会在正文中发送消息而不会失败。
另外如果可能的话,发送附件的时候希望能够发送多个附件。我也意识到,现在我已经设置了我的脚本,因为我似乎不再需要SendMail Task
SSIS 中的一切,一切都可以通过脚本和我在 SSIS 中设置的变量来工作。
我不应该能够连接Script Task
到Send Mail Task
使它们一起工作吗?
这是我的脚本任务代码:
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Net.Mail
Imports System.Net
<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
Public Sub Main()
MsgBox(Dts.Variables("Username").Value.ToString)
Dim myHtmlMessage As MailMessage
Dim mySmtpClient As SmtpClient
Dim mailAuthentication As System.Net.NetworkCredential
mailAuthentication = New System.Net.NetworkCredential( _
Dts.Variables("Username").Value.ToString(), _
Dts.Variables("Password").Value.ToString())
myHtmlMessage = New MailMessage( _
Dts.Variables("From").Value.ToString(), _
Dts.Variables("To").Value.ToString(), _
Dts.Variables("Subject").Value.ToString(), _
Dts.Variables("Body").Value.ToString())
myHtmlMessage.Attachments.Add(New Attachment(Dts.Variables("Attachments").Value.ToString))
mySmtpClient = New SmtpClient(Dts.Variables("SMTPServer").Value.ToString(), Dts.Variables("Port").Value.ToString())
mySmtpClient.UseDefaultCredentials = False
mySmtpClient.Credentials = mailAuthentication
mySmtpClient.EnableSsl = True
mySmtpClient.Send(myHtmlMessage)
Dts.TaskResult = ScriptResults.Success
End Sub
End Class