Отправка почтового сообщения в формате HTML с помощью задачи «Скрипт»
Область применения:среда выполнения интеграции SSIS SQL Server
в Фабрика данных Azure
Задача SendMail служб Integration Services поддерживает только почтовые сообщения в формате обычного текста. Однако отправлять почтовые сообщения в формате HTML можно с помощью задачи «Скрипт» и почтовых функций платформы .NET Framework.
Примечание.
Если нужно создать задачу, которую будет удобно использовать в нескольких пакетах, рекомендуется начать разработку пользовательской задачи с этого образца задачи «Скрипт». Дополнительные сведения см. в разделе Разработка пользовательской задачи.
Description
В следующем примере пространство имен System.Net.Mail используется для настройки и передачи почтового сообщения в формате HTML. Скрипт получает текст электронной почты из переменных пакета to, From, Subject и текст электронной почты, использует их для создания новой
Настройка этого примера задачи «Скрипт» без диспетчера соединений SMTP
Создайте строковые переменные с именами
HtmlEmailTo
,HtmlEmailFrom
иHtmlEmailSubject
, затем присвойте им соответствующие значения, чтобы получить допустимое тестовое сообщение.Создайте строковую переменную с именем
HtmlEmailBody
и присвойте ей в качестве значения строку с разметкой HTML. Например:<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Создайте строковую переменную с именем
HtmlEmailServer
и присвойте ей в качестве значения имя доступного SMTP-сервера, принимающего анонимные исходящие сообщения.Присвойте эти пять переменных свойству ReadOnlyVariables новой задачи "Скрипт".
Импортируйте пространства имен System.Net и System.Net.Mail в код.
В образце кода в этом разделе имя SMTP-сервера извлекается из переменной пакета. Однако можно также воспользоваться возможностью диспетчера соединений SMTP по инкапсуляции данных соединения и извлечению имени сервера из диспетчера соединений в пользовательском коде. Метод AcquireConnection диспетчера соединений SMTP возвращает строку в следующем формате:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
Можно использовать метод String.Split, чтобы разделить этот список аргументов на фрагменты отдельных строк по каждой точке с запятой (;) или знаку равенства (=), а затем извлечь второй аргумент (subscript 1) из фрагмента как имя сервера.
Настройка этого примера задачи «Скрипт» с диспетчером соединений SMTP
Измените задачу "Скрипт", настроенную выше, удалив переменную
HtmlEmailServer
из списка ReadOnlyVariables.Замените строку кода, извлекающую имя сервера:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
следующими строками:
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)
Код
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);
}