Delen via


Een HTML-e-mailbericht verzenden met de scripttaak

van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

De taak SendMail van Integration Services ondersteunt alleen e-mailberichten in tekst zonder opmaak. U kunt echter eenvoudig HTML-e-mailberichten verzenden met behulp van de scripttaak en de e-mailmogelijkheden van .NET Framework.

Notitie

Als u een taak wilt maken die u gemakkelijker opnieuw kunt gebruiken in meerdere pakketten, kunt u overwegen om de code in dit voorbeeldscripttaak te gebruiken als uitgangspunt voor een aangepaste taak. Zie Een aangepaste taak ontwikkelenvoor meer informatie.

Beschrijving

In het volgende voorbeeld wordt de naamruimte System.Net.Mail gebruikt om een HTML-e-mailbericht te configureren en te verzenden. Het script verkrijgt de aan-, van-, onderwerp- en hoofdtekst van de e-mail van pakketvariabelen, gebruikt deze om een nieuwe MailMessage-te maken en stelt de eigenschap IsBodyHtml in op True. Vervolgens wordt de SMTP-servernaam opgehaald uit een andere pakketvariabele, wordt een exemplaar van System.Net.Mail.SmtpClientgeïnitialiseerd en wordt de methode Send aangeroepen om het HTML-bericht te verzenden. In het voorbeeld wordt de verzendende functionaliteit van het bericht ingekapseld in een subroutine die opnieuw kan worden gebruikt in andere scripts.

Dit voorbeeld van een scripttaak configureren zonder SMTP-verbindingsbeheer

  1. Maak tekenreeksvariabelen met de naam HtmlEmailTo, HtmlEmailFromen HtmlEmailSubject en wijs de juiste waarden toe voor een geldig testbericht.

  2. Maak een tekenreeksvariabele met de naam HtmlEmailBody en wijs er een tekenreeks met HTML-markeringen aan toe. Bijvoorbeeld:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. Maak een tekenreeksvariabele met de naam HtmlEmailServer en wijs de naam toe van een beschikbare SMTP-server die anonieme uitgaande berichten accepteert.

  4. Wijs alle vijf deze variabelen toe aan de eigenschap ReadOnlyVariables van een nieuwe scripttaak.

  5. Importeer de System.Net en System.Net.Mail naamruimten in uw code.

De voorbeeldcode in dit onderwerp verkrijgt de SMTP-servernaam van een pakketvariabele. U kunt echter ook profiteren van een SMTP-verbindingsbeheer om de verbindingsgegevens in te kapselen en de servernaam uit het verbindingsbeheer in uw code te extraheren. De AcquireConnection methode van SMTP-verbindingsbeheer retourneert een tekenreeks in de volgende indeling:

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

U kunt de methode String.Split gebruiken om deze argumentlijst te scheiden in een matrix met afzonderlijke tekenreeksen op elke puntkomma (;) of gelijkteken (=) en vervolgens het tweede argument (subscript 1) uit de matrix te extraheren als servernaam.

Dit voorbeeld van scripttaak configureren met SMTP-verbindingsbeheer

  1. Wijzig de scripttaak die eerder is geconfigureerd door de HtmlEmailServer variabele te verwijderen uit de lijst met ReadOnlyVariables.

  2. Vervang de coderegel waarmee de servernaam wordt verkregen:

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

    met de volgende regels:

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

Zie ook

e-mailtaak verzenden