Attività personalizzata SendMail
L'esempio SendMail dimostra come creare un'attività personalizzata che deriva da AsyncCodeActivity per inviare messaggi di posta elettronica tramite il protocollo SMTP da usare in un'applicazione flusso di lavoro. Nell'attività personalizzata vengono usate le funzionalità di SmtpClient per inviare messaggi di posta elettronica in modo asincrono e con autenticazione. Nell'attività sono inoltre disponibili funzionalità per l'utente finale, ad esempio la modalità test, la sostituzione dei token, i modelli di file e il percorso di rilascio di prova.
Nella tabella seguente vengono indicati in dettaglio gli argomenti per l'attività SendMail
.
Nome | Tipo | Descrizione |
---|---|---|
Host | String | Indirizzo dell'host del server SMTP. |
Porta | String | Porta del servizio SMTP nell'host. |
EnableSsl | bool | Specifica se la classe SmtpClient usa il protocollo SSL (Secure Sockets Layer) per crittografare la connessione. |
UserName | String | Nome utente per configurare le credenziali per l'autenticazione della proprietà Credentials del mittente. |
Password | String | Password per configurare le credenziali per l'autenticazione della proprietà Credentials del mittente. |
Oggetto | InArgument<T><string> | Oggetto del messaggio. |
Body | InArgument<T><string> | Corpo del messaggio. |
Allegati | InArgument<T><string> | Raccolta di allegati usata per archiviare i dati allegati a questo messaggio di posta elettronica. |
Da | MailAddress | Indirizzo del mittente per il messaggio di posta elettronica. |
Per | InArgument<T><MailAddressCollection> | Raccolta di indirizzi contenente i destinatari di questo messaggio di posta elettronica. |
CC | InArgument<T><MailAddressCollection> | Raccolta di indirizzi contenente i destinatari della copia per conoscenza (CC) di questo messaggio di posta elettronica. |
BCC | InArgument<T><MailAddressCollection> | Raccolta di indirizzi contenente i destinatari della copia per conoscenza nascosta (CCN) di questo messaggio di posta elettronica. |
OAuth | InArgument<T><IDictionary<stringa, stringa>> | Token da sostituire nel corpo del messaggio. Questa funzionalità consente agli utenti di specificare alcuni valori nel corpo del messaggio che possono essere sostituiti in un secondo momento dai token specificati usando questa proprietà. |
BodyTemplateFilePath | String | Percorso di un modello per il corpo del messaggio. L'attività SendMail copia il contenuto di questo file nella relativa proprietà del corpo.Il modello può contenere token sostituiti dal contenuto della proprietà Token. |
TestMailTo | MailAddress | Quando viene impostata questa proprietà, tutti messaggi di posta elettronica vengono inviati all'indirizzo specificato. Questa proprietà deve essere usata quando si esegue il test di flussi di lavoro, ad esempio quando si vuole verificare che tutti i messaggi di posta elettronica vengano inviati in modo corretto senza effettuare l'invio ai destinatari effettivi. |
TestDropPath | String | Quando viene impostata questa proprietà, tutti messaggi di posta elettronica vengono salvati nel file specificato. Questa proprietà deve essere usata quando si esegue il test o il debug di flussi di lavoro per verificare che il formato e il contenuto dei messaggi di posta elettronica in uscita siano corretti. |
Contenuto della soluzione
Nella soluzione sono contenuti due progetti.
Project | Descrizione | File importanti |
---|---|---|
SendMail | Attività SendMail | 1. SendMail.cs: implementazione dell'attività principale 2. SendMailDesigner.xaml e SendMailDesigner.xaml.cs: finestra di progettazione per l'attività SendMail 3. MailTemplateBody.htm: modello per il messaggio di posta elettronica da inviare. |
SendMailTestClient | Client in cui eseguire il test dell'attività SendMail. In questo progetto l'attività viene richiamata in due modi diversi, ovvero 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 un flusso di lavoro a livello di codice che usa SendMail. |
Ulteriore configurazione dell'attività SendMail
Sebbene non illustrato nell'esempio, gli utenti possono configurare ulteriormente l'attività SendMail. Nelle tre sezioni successive viene illustrato come eseguire questa operazione.
Invio di un messaggio di posta elettronica usando token specificati nel corpo del messaggio
In questo frammento di codice viene illustrato come è possibile inviare messaggi di posta elettronica nel cui corpo sono presenti token. Si noti il modo in cui i token vengono specificati nella proprietà Body. I valori per tali token vengono specificati nella proprietà 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
In questo frammento di codice viene illustrato come inviare un messaggio di posta elettronica usando un token del modello nel corpo. Si noti che quando si imposta la proprietà BodyTemplateFilePath
non è necessario specificare 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à test
In questo frammento di codice viene illustrato come impostare le due proprietà di test. Se si imposta TestMailTo
, tutti i messaggi verranno inviati a john.doe@contoso.con
, indipendentemente dai valori impostati per il destinatario effettivo e i destinatari in copia. Se si imposta TestDropPath, tutti i messaggi di posta elettronica in uscita verranno inoltre salvati nel percorso specificato. È possibile impostare queste proprietà in modo indipendente l'una dall'altra perché 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 di configurazione
Per eseguire l'esempio, è necessario disporre dell'accesso a un server SMTP.
Per altre informazioni sulla configurazione di un server SMTP, vedere i collegamenti seguenti.
Per eseguire il download, sono disponibili emulatori SMTP forniti da terze parti.
Per eseguire questo esempio
In Visual Studio aprire il file di soluzione SendMail.sln.
Verificare di disporre dell'accesso a un server SMTP valido. Vedere le istruzioni di configurazione.
Configurare il programma con l'indirizzo del server e gli indirizzi e-mail del mittente e del destinatario.
Per eseguire correttamente l'esempio, può essere necessario configurare il valore degli indirizzi e-mail del mittente e del destinatario e l'indirizzo del server SMTP in Program.cs e in Sequence.xaml. Poiché i messaggi di posta elettronica vengono inviati in due modalità diverse, sarà necessario modificare l'indirizzo in entrambi i percorsi.
Per compilare la soluzione, premere CTRL+MAIUSC+B.
Per eseguire la soluzione, premere CTRL+F5.