使用脚本任务发送 HTML 邮件消息

Integration Services SendMail 任务仅支持纯文本格式的邮件消息。但是,您可以使用脚本任务以及 .NET Framework 的邮件功能轻松发送 HTML 邮件消息。

注意注意

如果希望创建可更方便地重用于多个包的任务,请考虑以此脚本任务示例中的代码为基础,创建自定义任务。有关详细信息,请参阅开发自定义任务

说明

下面的示例使用 System.Net.Mail 命名空间配置和发送 HTML 邮件消息。该脚本从包变量获取电子邮件的收件人、发件人、主题和正文,然后使用它们创建新 MailMessage,并将其 IsBodyHtml 属性设置为 True。接着,该脚本从另一个包变量获取 SMTP 服务器名称,然后初始化 System.Net.Mail.SmtpClient 实例,并调用其 Send 方法发送 HTML 消息。该示例将消息发送功能封装到一个可在其他脚本中重用的子例程中。

不使用 SMTP 连接管理器配置此脚本任务示例

  1. 创建名为 HtmlEmailTo、HtmlEmailFrom 和 HtmlEmailSubject 的字符串变量,并向它们分配相应的值,以用于有效的测试消息。

  2. 创建一个名为 HtmlEmailBody 的字符串变量,并向其分配 HTML 标记字符串。例如:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
    
  3. 创建一个名为 HtmlEmailServer 的字符串变量,并向其分配一个可接收匿名传出消息的可用 SMTP 服务器的名称。

  4. 将这五个变量全部分配到新脚本任务的 ReadOnlyVariables 属性。

  5. 将 System.Net 和 System.Net.Mail 命名空间导入到代码中。

本主题中的示例代码从包变量获取 SMTP 服务器名称。当然,还可以利用 SMTP 连接管理器封装连接信息,并在代码中从连接管理器提取服务器名称。SMTP 连接管理器的 AcquireConnection 方法以下列格式返回一个字符串:

SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;

可以使用 String.Split 方法将此参数列表从每个分号 (;) 或等号 (=) 处分为一个单独的字符串数组,然后提取该数组的第二个参数 (subscript 1) 作为服务器名称。

使用 SMTP 连接管理器配置此脚本任务示例

  1. 通过从 ReadOnlyVariables 列表删除 HtmlEmailServer 变量来修改先前配置的脚本任务。

  2. 将获取服务器名称的代码行:

        Dim smtpServer As String = _
          Dts.Variables("HtmlEmailServer").Value.ToString
    

    替换为以下代码行:

        Dim smtpConnectionString As String = _
          DirectCast(Dts.Connections("SMTP Connection Manager").AcquireConnection(Dts.Transaction), String)
        Dim smtpServer As String = _
          smtpConnectionString.Split(New Char() {"="c, ";"c})(1)
    

代码

  Public Sub Main()

    Dim htmlMessageTo As String = _
      Dts.Variables("HtmlEmailTo").Value.ToString
    Dim htmlMessageFrom As String = _
      Dts.Variables("HtmlEmailFrom").Value.ToString
    Dim htmlMessageSubject As String = _
      Dts.Variables("HtmlEmailSubject").Value.ToString
    Dim htmlMessageBody As String = _
      Dts.Variables("HtmlEmailBody").Value.ToString
    Dim smtpServer As String = _
      Dts.Variables("HtmlEmailServer").Value.ToString

    SendMailMessage( _
        htmlMessageTo, htmlMessageFrom, _
        htmlMessageSubject, htmlMessageBody, _
        True, smtpServer)

    Dts.TaskResult = ScriptResults.Success

  End Sub

  Private Sub SendMailMessage( _
      ByVal SendTo As String, ByVal From As String, _
      ByVal Subject As String, ByVal Body As String, _
      ByVal IsBodyHtml As Boolean, ByVal Server As String)

    Dim htmlMessage As MailMessage
    Dim mySmtpClient As SmtpClient

    htmlMessage = New MailMessage( _
      SendTo, From, Subject, Body)
    htmlMessage.IsBodyHtml = IsBodyHtml

    mySmtpClient = New SmtpClient(Server)
    mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials
    mySmtpClient.Send(htmlMessage)

  End Sub
public void Main()
        {

            string htmlMessageTo = Dts.Variables["HtmlEmailTo"].Value.ToString();
            string htmlMessageFrom = Dts.Variables["HtmlEmailFrom"].Value.ToString();
            string htmlMessageSubject = Dts.Variables["HtmlEmailSubject"].Value.ToString();
            string htmlMessageBody = Dts.Variables["HtmlEmailBody"].Value.ToString();
            string smtpServer = Dts.Variables["HtmlEmailServer"].Value.ToString();

            SendMailMessage(htmlMessageTo, htmlMessageFrom, htmlMessageSubject, htmlMessageBody, true, smtpServer);

            Dts.TaskResult = (int)ScriptResults.Success;

        }

        private void SendMailMessage(string SendTo, string From, string Subject, string Body, bool IsBodyHtml, string Server)
        {

            MailMessage htmlMessage;
            SmtpClient mySmtpClient;

            htmlMessage = new MailMessage(SendTo, From, Subject, Body);
            htmlMessage.IsBodyHtml = IsBodyHtml;

            mySmtpClient = new SmtpClient(Server);
            mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;
            mySmtpClient.Send(htmlMessage);

        }
Integration Services 图标(小) 使 Integration Services 保持最新

若要从 Microsoft 获得最新的下载内容、文章、示例和视频,以及从社区获得所选解决方案,请访问 MSDN 或 TechNet 上的 Integration Services 页:

若要获得有关这些更新的自动通知,请订阅该页上提供的 RSS 源。

请参阅

概念