Enviando uma mensagem de email HTML com a tarefa Script
A tarefa SendMail do Integration Services oferece suporte apenas a 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 a seguir 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
eHtmlEmailSubject
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
eSystem.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 a cada ponto-e-vírgula (;) ou sinal de igual (=) e, em seguida, extrair o segundo argumento (subscript 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);
}
Mantenha-se atualizado com o Integration Services
Para obter os downloads, artigos, exemplos e vídeos mais recentes da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN:
Visite a página do Integration Services no MSDN
Para receber uma notificação automática dessas atualizações, assine os RSS feeds disponíveis na página.