【问题标题】:How do I check if the attachment variable is empty before adding it to mail message?在将附件变量添加到邮件消息之前,如何检查附件变量是否为空?
【发布时间】:2013-02-12 18:35:51
【问题描述】:

我已经设法使用带有 VB.NET 代码的脚本任务从我的 SSIS 包发送电子邮件。我不擅长编写脚本,我基本上是在网上查看各种脚本以使我到达我所在的位置。我遇到的问题是我已经在 BIDS 的 SSIS 包中设置了所有变量,并且在我的包中将它们设置为 ReadOnly

如果我为我的 Attachment 包变量指定一个值,一切正常,但如果我不这样做,那么我的脚本就会失败。当我用我的脚本发送电子邮件时,我并不总是想发送附件。我希望修改代码,以便如果在 BIDS 的 SSIS 包中没有为我的 Attachement 变量指定值,那么我的脚本任务只会在正文中发送消息而不会失败。

另外如果可能的话,发送附件的时候希望能够发送多个附件。我还意识到,现在我已经设置了我的脚本,因为我似乎不再需要 SSIS 中的 SendMail Task 一切都可以通过脚本和我在 SSIS 中设置的变量来工作。 p>

难道我不能将 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

【问题讨论】:

    标签: vb.net ssis


    【解决方案1】:

    在将值添加到邮件附件之前检查变量的逻辑

    • 更改脚本中的以下行,使用函数 String.IsNullOrEmpty 检查变量 Attachments 中的值是否不为空。

    • Script Task 中使用包变量时,最好在变量的范围前加上 User::System:: 之类的前缀.

    • 要再添加一个条件,可以在添加到邮件附件之前,使用函数System.IO.File.Exists检查文件是否真的存在于指定路径中。

      李>

    发件人:

    myHtmlMessage.Attachments.Add(New Attachment(Dts.Variables("Attachments").Value.ToString))
    

    收件人:

    Dim attachment As String = Dts.Variables("User::Attachments").Value.ToString()
    
    If Not String.IsNullOrEmpty(attachment) Then
        If System.IO.File.Exists(attachment) Then
            myHtmlMessage.Attachments.Add(New Attachment(attachment))
        End If
    End If
    

    【讨论】:

      【解决方案2】:

      “我不应该将脚本任务连接到发送邮件任务以使它们一起工作吗?”

      您可以使用Expressions(第三个选项卡)使Send Email Task 动态化。表达式允许您根据值使 SSIS 包中的任何内容表现不同。如您所见,您需要修改的大多数属性都显示在下拉列表中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2012-05-28
        相关资源
        最近更新 更多