Partilhar via


Enviando uma mensagem de email HTML com a tarefa de script

se aplica a:SQL Server SSIS Integration Runtime no Azure Data Factory

A tarefa SendMail do Integration Services oferece suporte apenas a mensagens de email em formato de texto sem formatação. No entanto, você pode facilmente enviar mensagens de email HTML usando a tarefa Script e os recursos de email do .NET Framework.

Observação

Se você quiser criar uma tarefa que possa ser reutilizada mais facilmente em vários pacotes, considere usar o código neste exemplo de tarefa Script como o ponto de partida para uma tarefa personalizada. Para obter mais informações, consulte Desenvolvendo uma tarefa personalizada.

Descrição

O exemplo a seguir usa o namespace System.Net.Mail para configurar e enviar uma mensagem de email HTML. O script obtém o Para, De, Assunto e o corpo do email das variáveis de pacote, usa-os para criar um novo MailMessagee define sua propriedade IsBodyHtml como True. Em seguida, ele obtém o nome do servidor SMTP de outra variável de pacote, inicializa uma instância de System.Net.Mail.SmtpCliente chama seu método Send para enviar a mensagem HTML. O exemplo encapsula a funcionalidade de envio de mensagens em uma sub-rotina que pode ser reutilizada em outros scripts.

Para configurar este exemplo de Tarefa de Script sem um Gerenciador de Conexões SMTP

  1. Crie variáveis de cadeia de caracteres chamadas HtmlEmailTo, HtmlEmailFrome HtmlEmailSubject e atribua valores apropriados a elas para uma mensagem de teste válida.

  2. Crie uma variável de cadeia de caracteres chamada HtmlEmailBody e atribua uma cadeia de caracteres de marcação HTML a ela. Por exemplo:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. Crie uma variável de cadeia de caracteres chamada HtmlEmailServer e atribua o nome de um servidor SMTP disponível que aceite mensagens de saída anônimas.

  4. Atribua todas essas cinco variáveis à propriedade ReadOnlyVariables de uma nova tarefa Script.

  5. Importe os namespaces System.Net e System.Net.Mail para seu código.

O código de exemplo neste tópico obtém o nome do servidor SMTP de uma variável de pacote. No entanto, você também pode aproveitar um gerenciador de conexões SMTP para encapsular as informações de conexão e extrair o nome do servidor do gerenciador de conexões em seu código. O método AcquireConnection do gerenciador de conexões SMTP retorna uma cadeia de caracteres no seguinte formato:

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

Você pode usar o método String.Split para separar essa lista de argumentos em uma matriz de cadeias de caracteres individuais em cada ponto-e-vírgula (;) ou sinal de igual (=) e, em seguida, extrair o segundo argumento (subscrito 1) da matriz como o nome do servidor.

Para configurar este exemplo de Tarefa de Script com um Gerenciador de Conexões SMTP

  1. Modifique a tarefa Script configurada anteriormente removendo a variável HtmlEmailServer da lista de ReadOnlyVariables.

  2. Substitua a linha de código que obtém o nome do servidor:

    Dim smtpServer As String = _  
      Dts.Variables("HtmlEmailServer").Value.ToString  
    

    com as seguintes linhas:

    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)  
    

Código

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

Ver também

Tarefa Enviar Email