使用指令碼工作傳送 HTML 郵件訊息
適用於:Azure Data Factory 中的 SQL Server SSIS Integration Runtime
Integration Services SendMail 工作只支援純文字格式的郵件訊息。 不過您可以使用指令碼工作與 .NET Framework 的郵件功能,輕鬆地傳送 HTML 郵件訊息。
注意
如果您想要建立可更輕鬆地在多個封裝之間重複使用的工作,請考慮使用此指令碼工作範例中的程式碼做為自訂工作的起點。 如需詳細資訊,請參閱 開發自訂工作。
描述
下列範例使用 System.Net.Mail 命名空間來設定和傳送 HTML 郵件訊息。 指令碼會從套件變數取得電子郵件的收件者、寄件者、主旨以及本文、使用它們來建立新的 MailMessage 並將其 IsBodyHtml 屬性設定為 True。 然後它會從其他套件變數取得 SMTP 伺服器名稱、初始化 System.Net.Mail.SmtpClient 的執行個體,然後呼叫其 Send 方法以傳送 HTML 訊息。 這個範例會封裝在副程式中傳送功能的訊息,副程式本身可在其他指令碼中重複使用。
若要不使用 SMTP 連接管理員來設定這個指令碼工作範例
建立名為
HtmlEmailTo
、HtmlEmailFrom
和HtmlEmailSubject
的字串變數,並為有效的測試訊息指派適當的值給它們。建立名為
HtmlEmailBody
的字串變數,並將 HTML 標記的字串指派給它。 例如:<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
建立名為
HtmlEmailServer
的字串變數,並指派可用的 SMTP 伺服器名稱,以接受匿名的外寄訊息。將這五個變數全部都指派到新指令碼工作的 ReadOnlyVariables 屬性。
將 System.Net 和 System.Net.Mail 命名空間匯入程式碼。
本主題中的範例程式碼會從封裝變數取得 SMTP 伺服器名稱。 不過,您也可以利用 SMTP 連接管理員封裝連接資訊,並從程式碼中的連接管理員擷取伺服器名稱。 SMTP 連接管理員的 AcquireConnection 方法會以下列格式傳回字串:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
您可以使用 String.Split 方法,在每個分號 (;) 或是等號 (=) 將此引數清單分隔成個別字串的陣列,然後從陣列中擷取第二個引數 (標註 1) 作為伺服器名稱。
若要使用 SMTP 連接管理員來設定這個指令碼工作範例
透過從 ReadOnlyVariables 清單中移除
HtmlEmailServer
變數,以修改之前設定的指令碼工作。取代用以取得伺服器名稱的程式碼行:
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);
}