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.

DescrizioneDescription

Nell'esempio seguente viene usato lo spazio dei nomi System.Net.Mail per configurare e inviare un messaggio di posta 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 usa per creare un nuovo oggetto MailMessage e ne imposta la proprietà IsBodyHtml su 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. 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.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. Ad esempioFor 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. Assegnare queste cinque variabili alla proprietà ReadOnlyVariables di una nuova attività Script.Assign all five of these variables to the ReadOnlyVariables property of a new Script task.

  5. Importare gli spazi dei nomi System.Net e System.Net.Mail 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 usare 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.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 variabile HtmlEmailServer 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 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);  

        }  

Vedere ancheSee Also

Attività Invia messaggiSend Mail Task