Invio di un messaggio di posta HTML con l'attività ScriptSending an HTML Mail Message with the Script Task

L'attività SendMail di Integration ServicesIntegration Services supporta solo messaggi di posta in formato di testo normale.The Integration ServicesIntegration Services SendMail task only supports mail messages in plain text format. Tuttavia è possibile inviare facilmente messaggi di posta HTML tramite l'attività Script e le funzionalità di posta di .NET Framework.However you can easily send HTML mail messages by using the Script task and the mail capabilities of the .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.If you want to create a task that you can more easily reuse across multiple packages, consider using the code in this Script task sample as the starting point for a custom task. Per altre informazioni, vedere Sviluppo di un'attività personalizzata.For more information, see Developing a Custom Task.

DescriptionDescription

L'esempio seguente usa il System.Net.Mail dello spazio dei nomi per configurare e inviare un messaggio di posta elettronica HTML.The following example uses the System.Net.Mail namespace to configure and send an HTML mail message. 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 MailMessage ne imposta il relativo IsBodyHtml proprietà True.The script obtains the To, From, Subject, and body of the e-mail from package variables, uses them to create a new MailMessage, and sets its IsBodyHtml property to True. Quindi Ottiene il nome del server SMTP da un'altra variabile del pacchetto, Inizializza un'istanza di SmtpCliente chiama il relativo inviare metodo per inviare il messaggio HTML.Then it obtains the SMTP server name from another package variable, initializes an instance of System.Net.Mail.SmtpClient, and calls its Send method to send the HTML message. Nell'esempio il messaggio viene incapsulato inviando la funzionalità in una subroutine che potrebbe essere riutilizzata in altri script.The sample encapsulates the message sending functionality in a subroutine that could be reused in other scripts.

Per configurare questa attività Script di esempio senza una gestione connessione SMTPTo configure this Script Task example without an SMTP Connection Manager

  1. Creare le variabili di stringa denominate HtmlEmailTo, HtmlEmailFrom e HtmlEmailSubject e assegnare i valori appropriati per un messaggio di prova valido.Create string variables named HtmlEmailTo, HtmlEmailFrom, and HtmlEmailSubject and assign appropriate values to them for a valid test message.

  2. Creare una variabile di stringa denominata HtmlEmailBody e assegnarle una stringa di markup HTML.Create a string variable named HtmlEmailBody and assign a string of HTML markup to it. Esempio:For example:

    <html><body><h1>Testing</h1><p>This is a <b>test</b> message.</p></body></html>  
    
  3. Creare una variabile di stringa denominata HtmlEmailServer e assegnare il nome di un server SMTP disponibile che accetta messaggi in uscita anonimi.Create a string variable named HtmlEmailServer and assign the name of an available SMTP server that accepts anonymous outgoing messages.

  4. Tutte queste cinque variabili per assegnare il ReadOnlyVariables proprietà di una nuova attività Script.Assign all five of these variables to the ReadOnlyVariables property of a new Script task.

  5. Importazione di System.Net e System.Net.Mail gli spazi dei nomi nel codice.Import the System.Net and System.Net.Mail namespaces into your code.

    Il codice di esempio in questo argomento ottiene il nome del server SMTP da una variabile del pacchetto.The sample code in this topic obtains the SMTP server name from a package variable. 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.However, you could also take advantage of an SMTP connection manager to encapsulate the connection information, and extract the server name from the connection manager in your code. Il metodo AcquireConnection della gestione connessione SMTP restituisce una stringa nel formato seguente:The AcquireConnection method of the SMTP connection manager returns a string in the following format:

    SmtpServer=smtphost;UseWindowsAuthentication=False;EnableSsl=False;

    È possibile utilizzare il String. Split (metodo) per separare questo elenco di argomenti in una matrice di stringhe singole in corrispondenza di ogni punto e virgola (;) o uguale (=) di accedere e quindi estrarre il secondo argomento (pedice 1) dalla matrice come nome del server.You can use the String.Split method to separate this argument list into an array of individual strings at each semicolon (;) or equal sign (=), and then extract the second argument (subscript 1) from the array as the server name.

Per configurare questa attività Script di esempio con una gestione connessione SMTPTo configure this Script Task example with an SMTP Connection Manager

  1. Modificare l'attività Script configurata precedentemente rimuovendo la HtmlEmailServer variabile dall'elenco di ReadOnlyVariables.Modify the Script task configured earlier by removing the HtmlEmailServer variable from the list of ReadOnlyVariables.

  2. Sostituire la riga di codice che ottiene il nome del server:Replace the line of code that obtains the server name:

    Dim smtpServer As String = _  
      Dts.Variables("HtmlEmailServer").Value.ToString  
    

    con le righe seguenti:with the following lines:

    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)  
    

CodiceCode

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);  

        }  

Vedere ancheSee Also

Attività Invia messaggiSend Mail Task