Enviando uma mensagem de email HTML com a tarefa Script
A tarefa SendMail do Integration Services suporta somente mensagens de email em formato de texto sem-formatação. Porém, você pode enviar mensagens de email HTML facilmente usando a tarefa Script e as capacidades de email do .NET Framework.
Observação |
---|
Se desejar criar uma tarefa mais fácil de ser reutilizada em vários pacotes, procure utilizar o código desse exemplo de tarefa Script como o ponto inicial de uma tarefa personalizada. Para obter mais informações, consulte Desenvolvendo uma tarefa personalizada. |
Descrição
O exemplo seguinte usa o namespace System.Net.Mail para configurar e enviar uma mensagem de email HTML. O script obtém o Para, o De, o Assunto e o corpo do email das variáveis do pacote, usa-os para criar uma nova MailMessag e define sua propriedade IsBodyHtml para True. Em seguida, obtém o nome do servidor SMTP de uma outra variável do pacote, inicializa uma instância do System.Net.Mail.SmtpClient e chama seu método Send para enviar a mensagem HTML. O exemplo encapsula a funcionalidade de envio da mensagem em uma sub-rotina que pode ser reutilizada em outros scripts.
Para configurar este exemplo de tarefa Script sem um gerenciador de conexões SMTP
Crie variáveis de cadeia de caracteres denominadas HtmlEmailTo, HtmlEmailFrom e HtmlEmailSubject e atribua a elas valores apropriados para uma mensagem de teste válida.
Crie uma variável String denominada HtmlEmailBody e atribua a ela uma cadeia de caracteres de marcação HTML. Por exemplo:
<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Crie uma variável de cadeia de caracteres denominada HtmlEmailServer e atribua o nome de um servidor SMTP disponível que aceite mensagens de saída anônimas.
Atribua todas as cinco variáveis à propriedade ReadOnlyVariables de uma nova tarefa Script.
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 do pacote. Contudo, você também pode tirar proveito de um gerenciador de conexões SMTP para encapsular as informações da 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 formato seguinte:
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 extrair o segundo argumento (subscrito 1) da matriz como o nome do servidor.
Para configurar este exemplo de tarefa Script com um gerenciador de conexões SMTP
Modifique a tarefa Script configurada anteriormente removendo a variável HtmlEmailServer da lista de ReadOnlyVariables.
Substitua a linha do código que obtém o nome do servidor:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
pelas 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 htmlMessageTo As String = _
Dts.Variables("HtmlEmailTo").Value.ToString
Dim htmlMessageFrom As String = _
Dts.Variables("HtmlEmailFrom").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( _
htmlMessageTo, htmlMessageFrom, _
htmlMessageSubject, htmlMessageBody, _
True, smtpServer)
Dts.TaskResult = ScriptResults.Success
End Sub
Private Sub SendMailMessage( _
ByVal SendTo As String, ByVal From 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( _
SendTo, From, Subject, Body)
htmlMessage.IsBodyHtml = IsBodyHtml
mySmtpClient = New SmtpClient(Server)
mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials
mySmtpClient.Send(htmlMessage)
End Sub
public void Main()
{
string htmlMessageTo = Dts.Variables["HtmlEmailTo"].Value.ToString();
string htmlMessageFrom = Dts.Variables["HtmlEmailFrom"].Value.ToString();
string htmlMessageSubject = Dts.Variables["HtmlEmailSubject"].Value.ToString();
string htmlMessageBody = Dts.Variables["HtmlEmailBody"].Value.ToString();
string smtpServer = Dts.Variables["HtmlEmailServer"].Value.ToString();
SendMailMessage(htmlMessageTo, htmlMessageFrom, htmlMessageSubject, htmlMessageBody, true, smtpServer);
Dts.TaskResult = (int)ScriptResults.Success;
}
private void SendMailMessage(string SendTo, string From, string Subject, string Body, bool IsBodyHtml, string Server)
{
MailMessage htmlMessage;
SmtpClient mySmtpClient;
htmlMessage = new MailMessage(SendTo, From, Subject, Body);
htmlMessage.IsBodyHtml = IsBodyHtml;
mySmtpClient = new SmtpClient(Server);
mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;
mySmtpClient.Send(htmlMessage);
}
|