Envoi d'un message électronique HTML à l'aide de la tâche de script
S’applique à :SQL Server SSIS Integration Runtime dans Azure Data Factory
La tâche SendMail de Integration Services prend uniquement en charge les messages électroniques au format texte brut. Toutefois, vous pouver envoyer facilement des messages électroniques HTML en utilisant la tâche de script et les fonctionnalités de messagerie du .NET Framework.
Notes
Si vous souhaitez créer une tâche plus facilement réutilisable sur plusieurs packages, envisagez d'utiliser le code indiqué dans l'exemple de tâche de script comme point de départ d'une tâche personnalisée. Pour plus d’informations, consultez Développement d’une tâche personnalisée.
Description
L’exemple suivant utilise l’espace de noms System.Net.Mail pour configurer et envoyer un e-mail HTML. Le script obtient le corps de l’e-mail to, From, Subject et to from package variables, les utilise pour créer un MailMessageet définit sa propriété IsBodyHtml sur True. Il obtient ensuite le nom du serveur SMTP auprès d’une autre variable du package, initialise une instance de System.Net.Mail.SmtpClient et appelle sa méthode Send pour envoyer le message HTML. L'exemple encapsule la fonctionnalité d'envoi du message dans une sous-routine susceptible d'être réutilisée dans d'autres scripts.
Pour configurer cet exemple de tâche de script sans gestionnaire de connexions SMTP
Créez des variables chaîne nommées
HtmlEmailTo
,HtmlEmailFrom
etHtmlEmailSubject
, puis attribuez-leur des valeurs appropriées à un message de test valide.Créez une variable chaîne nommée
HtmlEmailBody
et attribuez-lui une chaîne de balise HTML. Par exemple :<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Créez une variable chaîne nommée
HtmlEmailServer
et attribuez le nom d'un serveur SMTP disponible qui accepte des messages sortants anonymes.Attribuez ces cinq variables à la propriété ReadOnlyVariables d’une nouvelle tâche de script.
Importez les espaces de noms System.Net et System.Net.Mail dans votre code.
L'exemple de code de cette rubrique obtient le nom du serveur SMTP auprès d'une variable du package. Toutefois, vous pourriez également exploiter un gestionnaire de connexions SMTP pour encapsuler les informations de connexion, puis extraire le nom du serveur du gestionnaire de connexions dans votre code. La méthode AcquireConnection du gestionnaire de connexions SMTP renvoie une chaîne au format suivant :
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
Vous pouvez utiliser la méthode String.Split pour séparer cette liste d’arguments en un tableau de chaînes individuelles à chaque point-virgule (;) ou signe égal (=), puis extraire le deuxième argument (indice 1) du tableau en tant que nom du serveur.
Pour configurer cet exemple de tâche de script avec un gestionnaire de connexions SMTP
Modifiez la tâche de script configurée précédemment en supprimant la variable
HtmlEmailServer
de la liste de la propriété ReadOnlyVariables.Remplacez la ligne de code qui obtient le nom du serveur :
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
par les lignes suivantes :
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)
Code
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);
}