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
Skapa strängvariabler med namnet
HtmlEmailTo
,HtmlEmailFrom
ochHtmlEmailSubject
och tilldela lämpliga värden till dem för ett giltigt testmeddelande.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>
Skapa en strängvariabel med namnet
HtmlEmailServer
och tilldela namnet på en tillgänglig SMTP-server som accepterar anonyma utgående meddelanden.Tilldela alla fem variablerna till egenskapen ReadOnlyVariables för en ny skriptaktivitet.
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
Ändra skriptuppgiften som konfigurerades tidigare genom att ta bort variabeln
HtmlEmailServer
från listan över ReadOnlyVariables.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);
}