Senden einer HTML-E-Mail mit dem Skripttask
Gilt für:SQL Server SSIS Integration Runtime in Azure Data Factory
Der Task „Mail senden“ in Integration Services unterstützt nur E-Mails im Nur-Text-Format. Sie können jedoch problemlos HTML-E-Mails mithilfe des Skripttasks und den E-Mail-Funktionen des .NET Framework senden.
Hinweis
Wenn Sie einen Task erstellen möchten, den Sie einfacher in mehreren Paketen wiederverwenden können, empfiehlt es sich, den Code in diesem Skripttaskbeispiel als Ausgangspunkt für einen benutzerdefinierten Task zu verwenden. Weitere Informationen finden Sie unter Entwickeln eines benutzerdefinierten Tasks.
BESCHREIBUNG
Im folgenden Beispiel wird der System.Net.Mail-Namespace verwendet, um eine HTML-E-Mail zu konfigurieren und zu senden. Das Skript ruft den Textkörper "An", "Von", "Betreff" und "Text" der E-Mail aus Paketvariablen ab, verwendet sie zum Erstellen eines neuen MailMessage-und legt seine IsBodyHtml- eigenschaft auf Truefest. Es ruft dann den SMTP-Servernamen aus einer weiteren Paketvariablen ab, initialisiert eine Instanz von System.Net.Mail.SmtpClient und ruft die Send-Methode zum Senden der HTML-Nachricht auf. Im Beispiel wird die Funktionalität zum Senden der Nachricht in eine Unterroutine gekapselt, die in anderen Skripts wiederverwendet werden kann.
So konfigurieren Sie dieses Skripttaskbeispiel ohne einen SMTP-Verbindungs-Manager
Erstellen Sie Zeichenfolgenvariablen mit den Namen
HtmlEmailTo
,HtmlEmailFrom
undHtmlEmailSubject
, und weisen Sie diesen entsprechende Werte für eine gültige Testnachricht zu.Erstellen Sie eine Zeichenfolgenvariable mit dem Namen
HtmlEmailBody
, und weisen Sie dieser eine Zeichenfolge eines HTML-Markups zu. Beispiel:<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Erstellen Sie eine Zeichenfolgenvariable mit dem Namen
HtmlEmailServer
, und weisen Sie den Namen eines verfügbaren SMTP-Servers zu, der anonyme ausgehende Nachrichten akzeptiert.Weisen Sie alle fünf Variablen der ReadOnlyVariables-Eigenschaft eines neuen Skripttasks zu.
Importieren Sie die Namespaces System.Net und System.Net.Mail in Ihren Code.
In dem Beispielcode in diesem Thema wird der Name des SMTP-Servers aus einer Paketvariablen abgerufen. Sie könnten jedoch auch einen SMTP-Verbindungs-Manager nutzen, um die Verbindungsinformationen zu kapseln, und den Servernamen aus dem Verbindungs-Manager in Ihrem Code extrahieren. Die AcquireConnection-Methode des SMTP-Verbindungs-Managers gibt eine Zeichenfolge im folgenden Format zurück:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
Sie können die String.Split-Methode verwenden, um diese Argumentliste bei jedem Semikolon (;) oder Gleichheitszeichen (=) in ein Array einzelner Zeichenfolgen zu trennen, und das zweite Argument (Subskript 1) dann als Servernamen aus dem Array extrahieren.
So konfigurieren Sie dieses Skripttaskbeispiel mit einem SMTP-Verbindungs-Manager
Ändern Sie den zuvor konfigurierten Skripttask, indem Sie die
HtmlEmailServer
-Variable aus der Liste von ReadOnlyVariables-Variablen entfernen.Ersetzen Sie die folgende Codezeile, die den Servernamen abruft:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
durch die folgenden Zeilen:
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)
Code
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);
}