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
Maak tekenreeksvariabelen met de naam
HtmlEmailTo
,HtmlEmailFrom
enHtmlEmailSubject
en wijs de juiste waarden toe voor een geldig testbericht.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>
Maak een tekenreeksvariabele met de naam
HtmlEmailServer
en wijs de naam toe van een beschikbare SMTP-server die anonieme uitgaande berichten accepteert.Wijs alle vijf deze variabelen toe aan de eigenschap ReadOnlyVariables van een nieuwe scripttaak.
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
Wijzig de scripttaak die eerder is geconfigureerd door de
HtmlEmailServer
variabele te verwijderen uit de lijst met ReadOnlyVariables.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);
}