使用指令碼工作傳送 HTML 郵件訊息
Integration Services SendMail 工作只支援純文字格式的郵件訊息。 不過您可以使用指令碼工作與 .NET Framework 的郵件功能,輕鬆地傳送 HTML 郵件訊息。
注意
如果您想要建立可更輕鬆地在多個封裝之間重複使用的工作,請考慮使用此指令碼工作範例中的程式碼做為自訂工作的起點。 如需詳細資訊,請參閱 開發自訂工作。
描述
下列範例會 System.Net.Mail
使用 命名空間來設定及傳送 HTML 郵件訊息。 文稿會從套件變數取得電子郵件的 [收件者]、[來源]、[主旨] 和本文、使用這些變數來建立新的 MailMessag
e,並將其 屬性設定 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 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 保持最新狀態
如需來自Microsoft的最新下載、文章、範例和影片,以及來自社群的所選解決方案,請流覽 MSDN 上的 Integration Services 頁面:
流覽 MSDN 上的 Integration Services 頁面
如需這些更新的自動通知,請訂閱頁面上可用的 RSS 摘要。