Invio di un messaggio di posta HTML con l'attività Script
L'attività SendMail di Integration Services supporta solo messaggi di posta in formato di testo normale. Tuttavia è possibile inviare facilmente messaggi di posta HTML tramite l'attività Script e le funzionalità di posta di .NET Framework.
[!NOTA]
Se si desidera creare un'attività da riutilizzare più facilmente con più pacchetti, è possibile utilizzare il codice di questo esempio di attività Script come punto iniziale per un'attività personalizzata. Per ulteriori informazioni, vedere Sviluppo di un'attività personalizzata.
Descrizione
Nell'esempio seguente viene utilizzato lo spazio dei nomi System.Net.Mail per configurare e inviare un messaggio di posta HTML. Lo script ottiene i campi A, Da, Oggetto e il corpo del messaggio di posta elettronica dalle variabili del pacchetto, li utilizza per creare un nuovo oggetto MailMessag e ne imposta la proprietà IsBodyHtml su True. Ottiene quindi il nome del server SMTP da un'altra variabile del pacchetto, inizializza un'istanza di System.Net.Mail.SmtpClient e chiama il metodo Send per inviare il messaggio HTML. Nell'esempio il messaggio viene incapsulato inviando la funzionalità in una subroutine che potrebbe essere riutilizzata in altri script.
Per configurare questa attività Script di esempio senza una gestione connessione SMTP
Creare le variabili di stringa denominate HtmlEmailTo, HtmlEmailFrom e HtmlEmailSubject e assegnare i valori appropriati per un messaggio di prova valido.
Creare una variabile di stringa denominata HtmlEmailBody e assegnarle una stringa di markup HTML. Ad esempio:
<html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>
Creare una variabile di stringa denominata HtmlEmailServer e assegnare il nome di un server SMTP disponibile che accetta messaggi in uscita anonimi.
Assegnare queste cinque variabili alla proprietà ReadOnlyVariables di una nuova attività Script.
Importare gli spazi dei nomi System.Net e System.Net.Mail nel codice.
Il codice di esempio in questo argomento ottiene il nome del server SMTP da una variabile del pacchetto. Tuttavia, è possibile sfruttare anche una gestione connessione SMTP per incapsulare le informazioni di connessione ed estrarre il nome del server dalla gestione connessione nel codice. Il metodo AcquireConnection della gestione connessione SMTP restituisce una stringa nel formato seguente:
SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;
È possibile utilizzare il metodo String.Split per separare questo elenco di argomenti in una matrice di stringhe singole in corrispondenza di ogni punto e virgola (;) o segno di uguale (=), quindi estrarre il secondo argomento (pedice 1) dalla matrice come nome del server.
Per configurare questa attività Script di esempio con una gestione connessione SMTP
Modificare l'attività Script configurata precedentemente rimuovendo la variabile HtmlEmailServer dall'elenco di ReadOnlyVariables.
Sostituire la riga di codice che ottiene il nome del server:
Dim smtpServer As String = _ Dts.Variables("HtmlEmailServer").Value.ToString
con le righe seguenti:
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)
Codice
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);
}
|