Бөлісу құралы:


Отправка почтового сообщения в формате HTML с помощью задачи «Скрипт»

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

Задача SendMail служб Integration Services поддерживает только почтовые сообщения в формате обычного текста. Однако отправлять почтовые сообщения в формате HTML можно с помощью задачи «Скрипт» и почтовых функций платформы .NET Framework.

Примечание.

Если нужно создать задачу, которую будет удобно использовать в нескольких пакетах, рекомендуется начать разработку пользовательской задачи с этого образца задачи «Скрипт». Дополнительные сведения см. в разделе Разработка пользовательской задачи.

Description

В следующем примере пространство имен System.Net.Mail используется для настройки и передачи почтового сообщения в формате HTML. Скрипт извлекает значения полей "Кому", "От кого", "Тема" и текст сообщения электронной почты из переменных пакета, использует их для создания нового сообщения MailMessage и присваивает его свойству IsBodyHtml значение True. Затем сценарий получает имя SMTP-сервера из другой переменной пакета, инициализирует экземпляр клиента System.Net.Mail.SmtpClient и вызывает его метод Send, чтобы отправить сообщение в формате HTML. В образце функциональность отправки сообщений инкапсулируется в подпрограмме, которая может быть использована повторно в других скриптах.

Настройка этого примера задачи «Скрипт» без диспетчера соединений SMTP

  1. Создайте строковые переменные с именами HtmlEmailTo, HtmlEmailFrom и HtmlEmailSubject, затем присвойте им соответствующие значения, чтобы получить допустимое тестовое сообщение.

  2. Создайте строковую переменную с именем HtmlEmailBody и присвойте ей в качестве значения строку с разметкой HTML. Например:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. Создайте строковую переменную с именем HtmlEmailServer и присвойте ей в качестве значения имя доступного SMTP-сервера, принимающего анонимные исходящие сообщения.

  4. Присвойте эти пять переменных свойству ReadOnlyVariables новой задачи "Скрипт".

  5. Импортируйте пространства имен System.Net и System.Net.Mail в код.

В образце кода в этом разделе имя SMTP-сервера извлекается из переменной пакета. Однако можно также воспользоваться возможностью диспетчера соединений SMTP по инкапсуляции данных соединения и извлечению имени сервера из диспетчера соединений в пользовательском коде. Метод AcquireConnection диспетчера соединений SMTP возвращает строку в следующем формате:

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

Можно использовать метод String.Split, чтобы разделить этот список аргументов на фрагменты отдельных строк по каждой точке с запятой (;) или знаку равенства (=), а затем извлечь второй аргумент (subscript 1) из фрагмента как имя сервера.

Настройка этого примера задачи «Скрипт» с диспетчером соединений SMTP

  1. Измените задачу "Скрипт", настроенную выше, удалив переменную HtmlEmailServer из списка ReadOnlyVariables.

  2. Замените строку кода, извлекающую имя сервера:

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

См. также

Задача «Отправка почты»