Udostępnij za pośrednictwem


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

  1. Utwórz zmienne ciągu o nazwie HtmlEmailTo, HtmlEmailFromi HtmlEmailSubject i przypisz do nich odpowiednie wartości w celu uzyskania prawidłowego komunikatu testowego.

  2. 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>  
    
  3. Utwórz zmienną ciągu o nazwie HtmlEmailServer i przypisz nazwę dostępnego serwera SMTP, który akceptuje anonimowe komunikaty wychodzące.

  4. Przypisz wszystkie pięć tych zmiennych do właściwości ReadOnlyVariables nowego zadania skryptu.

  5. 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

  1. Zmodyfikuj zadanie Skrypt skonfigurowane wcześniej, usuwając zmienną HtmlEmailServer z listy ReadOnlyVariables.

  2. 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);  
  
        }  

Zobacz też

wyślij zadanie poczty