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
Para configurar este exemplo de Tarefa de Script sem um Gerenciador de Conexões SMTP
Crie variáveis de cadeia de caracteres chamadas
HtmlEmailTo
,HtmlEmailFrom
eHtmlEmailSubject
e atribua valores apropriados a elas para uma mensagem de teste válida.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>
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.Atribua todas essas 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 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
Modifique a tarefa Script configurada anteriormente removendo a variável
HtmlEmailServer
da lista de ReadOnlyVariables.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);
}