0

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

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

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

我不应该能够连接Script TaskSend 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
4

2 回答 2

1

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

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

在此处输入图像描述

于 2013-02-12T20:31:07.637 回答
1

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

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

  • 在. _ User::_System::Script Task

  • 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
于 2013-02-12T18:50:19.993 回答