Odeslání e-mailové zprávy HTML pomocí úlohy skriptu
platí pro:SQL Server SSIS Integration Runtime ve službě Azure Data Factory
Úloha SendMail integračních služeb podporuje pouze e-mailové zprávy ve formátu prostého textu. E-mailové zprávy HTML ale můžete snadno odesílat pomocí úlohy Skript a poštovních funkcí rozhraní .NET Framework.
Poznámka
Pokud chcete vytvořit úlohu, kterou můžete snadněji použít ve více balíčcích, zvažte použití kódu v této ukázce úlohy Skript jako výchozí bod pro vlastní úlohu. Další informace naleznete v tématu Vývoj vlastníhoúloh .
Popis
Následující příklad používá obor názvů System.Net.Mail ke konfiguraci a odeslání e-mailové zprávy HTML. Skript získá To, From, Subject a tělo e-mailu z proměnných balíčku, používá je k vytvoření nové MailMessagea nastaví jeho IsBodyHtml vlastnost True. Potom získá název serveru SMTP z jiné proměnné balíčku, inicializuje instanci System.Net.Mail.SmtpClienta zavolá její Send metodu pro odeslání zprávy HTML. Ukázka zapouzdřuje funkci odesílání zpráv v podprogramu, který lze znovu použít v jiných skriptech.
Konfigurace tohoto příkladu úlohy skriptu bez správce připojení SMTP
Vytvořte řetězcové proměnné s názvem
HtmlEmailTo
,HtmlEmailFrom
aHtmlEmailSubject
a přiřaďte jim odpovídající hodnoty pro platnou testovací zprávu.Vytvořte řetězcovou proměnnou s názvem
HtmlEmailBody
a přiřaďte jí řetězec kódu HTML. Například:<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Vytvořte řetězcovou proměnnou s názvem
HtmlEmailServer
a přiřaďte název dostupného serveru SMTP, který přijímá anonymní odchozí zprávy.Přiřaďte všech pět těchto proměnných ReadOnlyVariables vlastnost nové úlohy Script.
Importujte obory názvů System.Net a System.Net.Mail do kódu.
Vzorový kód v tomto tématu získá název serveru SMTP z proměnné balíčku. Můžete ale také využít správce připojení SMTP k zapouzdření informací o připojení a extrahovat název serveru ze správce připojení v kódu. Metoda AcquireConnection správce připojení SMTP vrátí řetězec v následujícím formátu:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
Metodu String.Split můžete použít k oddělení tohoto seznamu argumentů do pole jednotlivých řetězců na každém středníku (;) nebo rovnítko (=) a potom extrahovat druhý argument (dolní index 1) z pole jako název serveru.
Konfigurace tohoto příkladu úlohy skriptu pomocí Správce připojení SMTP
Upravte úlohu skriptu nakonfigurovanou dříve odebráním proměnné
HtmlEmailServer
ze seznamu ReadOnlyVariables.Nahraďte řádek kódu, který získá název serveru:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
s následujícími řádky:
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)
Kód
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);
}
Viz také
odeslat úkolu pošty