Envoi d'un message électronique HTML à l'aide de la tâche de script
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.
[!REMARQUE]
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 message électronique HTML. Le script obtient le destinataire, l'expéditeur, l'objet et le corps du message électronique à partir de variables du package, les utilise pour créer un nouveau MailMessage et définit sa propriété IsBodyHtml sur True. Ensuite, il obtient 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 et HtmlEmailSubject, 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 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 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);
}
|