Wysyłanie wiadomości e-mail HTML za pomocą zadania skryptu
Dotyczy:sql Server SSIS Integration Runtime w usłudze Azure Data Factory
Zadanie SendMail usług Integration Services obsługuje tylko wiadomości e-mail w formacie zwykłego tekstu. Można jednak łatwo wysyłać wiadomości e-mail HTML przy użyciu zadania Skrypt i możliwości poczty programu .NET Framework.
Nuta
Jeśli chcesz utworzyć zadanie, które można łatwiej użyć w wielu pakietach, rozważ użycie kodu w tym przykładzie zadania skryptu jako punktu początkowego zadania niestandardowego. Aby uzyskać więcej informacji, zobacz Tworzenie niestandardowego zadania.
Opis
W poniższym przykładzie użyto przestrzeni nazw System.Net.Mail do skonfigurowania i wysłania wiadomości e-mail w formacie HTML. Skrypt uzyskuje właściwość Do, From, Subject i treść wiadomości e-mail ze zmiennych pakietu, używa ich do utworzenia nowej MailMessagei ustawia jej właściwość IsBodyHtml na wartość True. Następnie uzyskuje nazwę serwera SMTP z innej zmiennej pakietu, inicjuje wystąpienie System.Net.Mail.SmtpClienti wywołuje jego Send metodę wysyłania komunikatu HTML. Przykład hermetyzuje funkcję wysyłania komunikatów w podroutynie, która może być ponownie użyta w innych skryptach.
Aby skonfigurować ten przykład zadania skryptu bez Menedżera połączeń SMTP
Utwórz zmienne ciągu o nazwie
HtmlEmailTo
,HtmlEmailFrom
iHtmlEmailSubject
i przypisz do nich odpowiednie wartości w celu uzyskania prawidłowego komunikatu testowego.Utwórz zmienną ciągu o nazwie
HtmlEmailBody
i przypisz do niej ciąg znaczników HTML. Na przykład:<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Utwórz zmienną ciągu o nazwie
HtmlEmailServer
i przypisz nazwę dostępnego serwera SMTP, który akceptuje anonimowe komunikaty wychodzące.Przypisz wszystkie pięć tych zmiennych do właściwości ReadOnlyVariables nowego zadania skryptu.
Zaimportuj przestrzenie nazw System.Net i System.Net.Mail do kodu.
Przykładowy kod w tym temacie uzyskuje nazwę serwera SMTP ze zmiennej pakietu. Można jednak również skorzystać z menedżera połączeń SMTP, aby hermetyzować informacje o połączeniu i wyodrębnić nazwę serwera z menedżera połączeń w kodzie. Metoda AcquireConnection menedżera połączeń SMTP zwraca parametry w następującym formacie:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
Możesz użyć metody String.Split, aby oddzielić tę listę argumentów do tablicy pojedynczych ciągów w każdym średniku (;) lub znaku równości (=), a następnie wyodrębnić drugi argument (indeks dolny 1) z tablicy jako nazwę serwera.
Aby skonfigurować ten przykład zadania skryptu za pomocą Menedżera połączeń SMTP
Zmodyfikuj zadanie Skrypt skonfigurowane wcześniej, usuwając zmienną
HtmlEmailServer
z listy ReadOnlyVariables.Zastąp wiersz kodu, który uzyskuje nazwę serwera:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
z następującymi wierszami:
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)
Kod
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);
}