Dela via


Skicka ett HTML-e-postmeddelande med skriptaktiviteten

gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

Integration Services SendMail-uppgiften stöder endast e-postmeddelanden i oformaterad text. Du kan dock enkelt skicka HTML-e-postmeddelanden med hjälp av skriptaktiviteten och e-postfunktionerna i .NET Framework.

Not

Om du vill skapa en uppgift som du enklare kan återanvända i flera paket kan du överväga att använda koden i det här skriptuppgiftsexemplet som startpunkt för en anpassad uppgift. Mer information finns i Utveckla en anpassad uppgift.

Beskrivning

I följande exempel används namnområdet System.Net.Mail för att konfigurera och skicka ett HTML-e-postmeddelande. Skriptet hämtar till, från, ämne och brödtexten för e-postmeddelandet från paketvariabler, använder dem för att skapa en ny MailMessageoch anger dess IsBodyHtml egenskap till True. Sedan hämtas SMTP-servernamnet från en annan paketvariabel, initierar en instans av System.Net.Mail.SmtpClientoch anropar dess Send-metod för att skicka HTML-meddelandet. Exemplet kapslar in meddelandesändningsfunktionen i en underrutin som kan återanvändas i andra skript.

Så här konfigurerar du skriptuppgiftsexemplet utan en SMTP-anslutningshanterare

  1. Skapa strängvariabler med namnet HtmlEmailTo, HtmlEmailFromoch HtmlEmailSubject och tilldela lämpliga värden till dem för ett giltigt testmeddelande.

  2. Skapa en strängvariabel med namnet HtmlEmailBody och tilldela en sträng med HTML-kod till den. Till exempel:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. Skapa en strängvariabel med namnet HtmlEmailServer och tilldela namnet på en tillgänglig SMTP-server som accepterar anonyma utgående meddelanden.

  4. Tilldela alla fem variablerna till egenskapen ReadOnlyVariables för en ny skriptaktivitet.

  5. Importera namnrymderna System.Net och System.Net.Mail i koden.

Exempelkoden i det här avsnittet hämtar SMTP-servernamnet från en paketvariabel. Du kan dock också dra nytta av en SMTP-anslutningshanterare för att kapsla in anslutningsinformationen och extrahera servernamnet från anslutningshanteraren i koden. Den AcquireConnection metoden för SMTP-anslutningshanteraren returnerar en sträng i följande format:

SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;

Du kan använda metoden String.Split för att separera argumentlistan i en matris med enskilda strängar vid varje semikolon (;) eller likhetstecken (=) och sedan extrahera det andra argumentet (nedsänkt 1) från matrisen som servernamn.

Så här konfigurerar du skriptuppgiftsexemplet med en SMTP-anslutningshanterare

  1. Ändra skriptuppgiften som konfigurerades tidigare genom att ta bort variabeln HtmlEmailServer från listan över ReadOnlyVariables.

  2. Ersätt den kodrad som hämtar servernamnet:

    Dim smtpServer As String = _  
      Dts.Variables("HtmlEmailServer").Value.ToString  
    

    med följande rader:

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

Se även

Skicka e-postuppgift