共用方式為


使用指令碼工作傳送 HTML 郵件訊息

Integration Services SendMail 工作只支援純文字格式的郵件訊息。 不過您可以使用指令碼工作與 .NET Framework 的郵件功能,輕鬆地傳送 HTML 郵件訊息。

注意

如果您想要建立可更輕鬆地在多個封裝之間重複使用的工作,請考慮使用此指令碼工作範例中的程式碼做為自訂工作的起點。 如需詳細資訊,請參閱 開發自訂工作

描述

下列範例會 System.Net.Mail 使用 命名空間來設定及傳送 HTML 郵件訊息。 文稿會從套件變數取得電子郵件的 [收件者]、[來源]、[主旨] 和本文、使用這些變數來建立新的 MailMessage,並將其 屬性設定 IsBodyHtmlTrue。 然後,它會從另一個封裝變數取得 SMTP 伺服器名稱、初始化 的 System.Net.Mail.SmtpClient實例,並呼叫其 Send 方法來傳送 HTML 訊息。 這個範例會封裝在副程式中傳送功能的訊息,副程式本身可在其他指令碼中重複使用。

若要不使用 SMTP 連接管理員來設定這個指令碼工作範例

  1. 建立名為 HtmlEmailToHtmlEmailFromHtmlEmailSubject 的字串變數,並為有效的測試訊息指派適當的值給它們。

  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.NetSystem.Net.Mail 命名空間匯入您的程式代碼。

本主題中的範例程式碼會從封裝變數取得 SMTP 伺服器名稱。 不過,您也可以利用 SMTP 連接管理員封裝連接資訊,並從程式碼中的連接管理員擷取伺服器名稱。 SMTP 連接管理員的 AcquireConnection 方法會以下列格式傳回字串:

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

您可以使用 String.Split 方法,將這個自變數清單分成每個分號 (;) 或等號 (=) 的個別字串陣列陣列,然後將第二個自變數 (下標 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 上的 Integration Services 頁面:

流覽 MSDN 上的 Integration Services 頁面

如需這些更新的自動通知,請訂閱頁面上可用的 RSS 摘要。

另請參閱

傳送電子郵件工作