共用方式為


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

適用於:SQL Server Azure Data Factory 中的 SSIS Integration Runtime

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

注意

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

描述

下列範例使用 System.Net.Mail 命名空間來設定和傳送 HTML 郵件訊息。 文本會從套件變數取得電子郵件的 [收件者]、[來源]、[主旨] 和本文、使用這些變數建立新的 MailMessage,並將它的 IsBodyHtml 屬性設定為 True。 然後它會從其他套件變數取得 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. 透過從 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 htmlMessageFrom As String = _  
    Dts.Variables("HtmlEmailFrom").Value.ToString  
  Dim htmlMessageTo As String = _  
    Dts.Variables("HtmlEmailTo").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( _  
      htmlMessageFrom, htmlMessageTo, _  
      htmlMessageSubject, htmlMessageBody, _  
      True, smtpServer)  
  
  Dts.TaskResult = ScriptResults.Success  
  
End Sub  
  
Private Sub SendMailMessage( _  
    ByVal From As String, ByVal SendTo 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( _  
    From, SendTo, Subject, Body)  
  htmlMessage.IsBodyHtml = IsBodyHtml  
  
  mySmtpClient = New SmtpClient(Server)  
  mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials  
  mySmtpClient.Send(htmlMessage)  
  
End Sub  
public void Main()  
        {  
  
            string htmlMessageFrom = Dts.Variables["HtmlEmailFrom"].Value.ToString();  
            string htmlMessageTo = Dts.Variables["HtmlEmailTo"].Value.ToString();  
            string htmlMessageSubject = Dts.Variables["HtmlEmailSubject"].Value.ToString();  
            string htmlMessageBody = Dts.Variables["HtmlEmailBody"].Value.ToString();  
            string smtpServer = Dts.Variables["HtmlEmailServer"].Value.ToString();  
  
            SendMailMessage(htmlMessageFrom, htmlMessageTo, htmlMessageSubject, htmlMessageBody, true, smtpServer);  
  
            Dts.TaskResult = (int)ScriptResults.Success;  
  
        }  
  
        private void SendMailMessage(string From, string SendTo, string Subject, string Body, bool IsBodyHtml, string Server)  
        {  
  
            MailMessage htmlMessage;  
            SmtpClient mySmtpClient;  
  
            htmlMessage = new MailMessage(From, SendTo, Subject, Body);  
            htmlMessage.IsBodyHtml = IsBodyHtml;  
  
            mySmtpClient = new SmtpClient(Server);  
            mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;  
            mySmtpClient.Send(htmlMessage);  
  
        }  

另請參閱

傳送電子郵件工作