Condividi tramite


Attività personalizzata SendMail

Nell'esempio SendMail viene illustrato come creare un'attività personalizzata che deriva da AsyncCodeActivity per inviare messaggi di posta elettronica usando SMTP per l'uso all'interno di un'applicazione flusso di lavoro. L'attività personalizzata usa le funzionalità di SmtpClient per inviare posta elettronica in modo asincrono e per inviare messaggi di posta elettronica con l'autenticazione. Fornisce anche alcune funzionalità dell'utente finale, ad esempio la modalità di test, la sostituzione dei token, i modelli di file e il percorso di rilascio dei test.

La tabella seguente illustra in dettaglio gli argomenti per l'attività SendMail .

Nome TIPO Descrizione
Padrone di casa / Ospitante / Conduttore (depending on the intended context) Stringa Indirizzo dell'host del server SMTP.
Porto Stringa Porta del servizio di protocollo di trasferimento della posta (SMTP) nell'host.
EnableSsl Bool Specifica se SmtpClient usa Secure Sockets Layer (SSL) per crittografare la connessione.
Nome utente Stringa Nome utente per configurare le credenziali per autenticare la proprietà sender Credentials .
Parola chiave Stringa Password per configurare le credenziali per autenticare la proprietà sender Credentials .
Oggetto InArgument<T> <stringa> Oggetto del messaggio.
Corpo InArgument<T> <stringa> Corpo del messaggio.
Allegati InArgument<T> <stringa> Raccolta di allegati utilizzata per archiviare i dati allegati a questo messaggio di posta elettronica.
Da MailAddress Indirizzo di provenienza per questo messaggio di posta elettronica.
Per InArgument<T><MailAddressCollection> Raccolta di indirizzi che contiene i destinatari del messaggio di posta elettronica.
CC InArgument<T><MailAddressCollection> Raccolta di indirizzi che contiene i destinatari della copia di carbonio (CC) per questo messaggio di posta elettronica.
CCN InArgument<T><MailAddressCollection> Raccolta di indirizzi che contiene i destinatari della copia di carbonio cieco (BCC) per questo messaggio di posta elettronica.
Token InArgument<T> <Stringa IDictionary<, stringa>> Token da sostituire nel corpo. Questa funzionalità consente agli utenti di specificare alcuni valori nel corpo che possono essere sostituiti in un secondo momento dai token forniti usando questa proprietà.
BodyTemplateFilePath Stringa Percorso di un modello per il corpo. L'attività SendMail copia il contenuto di questo file nella proprietà 'body'.

Il modello può contenere token sostituiti dal contenuto della proprietà tokens.
TestMailTo MailAddress Quando questa proprietà è impostata, tutti i messaggi di posta elettronica vengono inviati all'indirizzo specificato.

Questa proprietà deve essere usata durante il test dei flussi di lavoro. Ad esempio, quando si vuole assicurarsi che tutti i messaggi di posta elettronica vengano inviati senza inviarli ai destinatari effettivi.
TestDropPath Stringa Quando questa proprietà è impostata, tutti i messaggi di posta elettronica vengono salvati anche nel file specificato.

Questa proprietà deve essere usata durante il test o il debug dei flussi di lavoro, per assicurarsi che il formato e il contenuto dei messaggi di posta elettronica in uscita siano appropriati.

Contenuto della soluzione

La soluzione contiene due progetti.

Progetto Descrizione File importanti
SendMail Attività SendMail 1. SendMail.cs: implementazione per l'attività principale
2. SendMailDesigner.xaml e SendMailDesigner.xaml.cs: strumenti di progettazione per l'attività SendMail
3. MailTemplateBody.htm: modello per l'invio del messaggio di posta elettronica.
SendMailTestClient Client per testare l'attività SendMail. Questo progetto illustra due modi per richiamare l'attività SendMail: in modo dichiarativo e a livello di codice. 1. Sequence1.xaml: flusso di lavoro che richiama l'attività SendMail.
2. Program.cs: richiama Sequence1 e crea anche un flusso di lavoro a livello di codice che usa SendMail.

Ulteriore configurazione dell'attività SendMail

Anche se non illustrato nell'esempio, gli utenti possono eseguire una configurazione aggiuntiva dell'attività SendMail. Le tre sezioni successive illustrano come viene eseguita questa operazione.

Invio di un messaggio di posta elettronica tramite token specificati nel corpo

Questo frammento di codice illustra come inviare messaggi di posta elettronica con token nel corpo. Si noti che i token vengono forniti nella proprietà body. I valori per tali token vengono forniti alla proprietà dei token.

IDictionary<string, string> tokens = new Dictionary<string, string>();
tokens.Add("@name", "John Doe");
tokens.Add("@date", DateTime.Now.ToString());
tokens.Add("@server", "localhost");

new SendMail
{
    From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
    To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
    Subject = "Test email",
    Body = "Hello @name. This is a test email sent from @server. Current date is @date",
    Host = "localhost",
    Port = 25,
    Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens)
};

Invio di un messaggio di posta elettronica tramite un modello

Questo frammento di codice illustra come inviare un messaggio di posta elettronica usando token modello nel corpo. Si noti che quando si imposta la BodyTemplateFilePath proprietà non è necessario fornire il valore per la proprietà Body (il contenuto del file modello verrà copiato nel corpo).

new SendMail
{
    From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
    To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
    Subject = "Test email",
    Host = "localhost",
    Port = 25,
    Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens),
    BodyTemplateFilePath = @"..\..\..\SendMail\Templates\MailTemplateBody.htm",
};

Invio di messaggi di posta elettronica in modalità di test

Questo frammento di codice mostra come impostare le due proprietà di test: impostando TestMailTo, tutti i messaggi verranno inviati a john.doe@contoso.con (ignorando i valori di A:, Cc, Ccn). Impostando TestDropPath, tutti i messaggi di posta elettronica in uscita verranno registrati anche nel percorso specificato. Queste proprietà possono essere impostate in modo indipendente (non sono correlate).

new SendMail
{
   From = new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
   To = new LambdaValue<MailAddressCollection>(
                    ctx => new MailAddressCollection() { new MailAddress("someone@microsoft.com") }),
   Subject = "Test email",
   Host = "localhost",
   Port = 25,
   Tokens = new LambdaValue<IDictionary<string, string>>(ctx => tokens),
   BodyTemplateFilePath = @"..\..\..\SendMail\Templates\MailTemplateBody.htm",
   TestMailTo= new LambdaValue<MailAddress>(ctx => new MailAddress("john.doe@contoso.com")),
   TestDropPath = @"c:\Samples\SendMail\TestDropPath\",
};

istruzioni Set-Up

L'accesso a un server SMTP è necessario per questo esempio.

Per altre informazioni sulla configurazione di un server SMTP, vedere i collegamenti seguenti.

Gli emulatori SMTP forniti da terze parti sono disponibili per il download.

Per eseguire questo esempio

  1. Usando Visual Studio, aprire il file della soluzione SendMail.sln.

  2. Assicurarsi di avere accesso a un server SMTP valido. Vedere le istruzioni di configurazione.

  3. Configura il programma con l'indirizzo del server e gli indirizzi email di partenza e di destinazione.

    Per eseguire correttamente questo esempio, potrebbe essere necessario configurare il valore di Indirizzi di posta elettronica Da e A e l'indirizzo del server SMTP in Program.cs e in Sequence.xaml. Sarà necessario modificare l'indirizzo in entrambe le posizioni perché il programma invia posta in due modi diversi

  4. Per compilare la soluzione, premere CTRL+MAIUSC+B.

  5. Per eseguire la soluzione, premere CTRL+F5.