Atividade personalizada do SendMail
O exemplo SendMail demonstra como criar uma atividade personalizada que deriva de para enviar email usando SMTP para uso em um aplicativo de fluxo de AsyncCodeActivity trabalho. A atividade personalizada usa os recursos de enviar e-mails de SmtpClient forma assíncrona e enviar e-mails com autenticação. Ele também fornece alguns recursos para o usuário final, como modo de teste, substituição de token, modelos de arquivo e caminho de descarte de teste.
A tabela a seguir detalha os argumentos para a SendMail
atividade.
Nome | Tipo | Description |
---|---|---|
Host | String | Endereço do host do servidor SMTP. |
Porta | String | Porta do serviço SMTP no host. |
EnableSsl | booleano | Especifica se o SmtpClient usa SSL (Secure Sockets Layer) para criptografar a conexão. |
Nome de utilizador | String | Nome de usuário para configurar as credenciais para autenticar a propriedade sender Credentials . |
Palavra-passe | String | Senha para configurar as credenciais para autenticar a propriedade sender Credentials . |
Assunto | InArgument<T><string> | Assunto da mensagem. |
Body | InArgument<T><string> | Corpo da mensagem. |
Anexos | InArgument<T><string> | Coleção de anexos usada para armazenar dados anexados a esta mensagem de e-mail. |
De | MailAddress | Endereço de origem para esta mensagem de e-mail. |
Para | InArgument<T><MailAddressCollection> | Coleção de endereços que contém os destinatários desta mensagem de email. |
CC | InArgument<T><MailAddressCollection> | Coleção de endereços que contém os destinatários da cópia carbono (CC) para esta mensagem de email. |
BCC | InArgument<T><MailAddressCollection> | Coleção de endereços que contém os destinatários de cópia oculta (BCC) para esta mensagem de email. |
Tokens | InArgument<T><Cadeia de caracteres IDictionary<, string>> | Tokens para substituir no corpo. Esse recurso permite que os usuários especifiquem alguns valores no corpo que podem ser substituídos posteriormente pelos tokens fornecidos usando essa propriedade. |
BodyTemplateFilePath | String | Caminho de um modelo para o corpo. A SendMail atividade copia o conteúdo desse arquivo para sua propriedade body.O modelo pode conter tokens que são substituídos pelo conteúdo da propriedade tokens. |
TestMailTo | MailAddress | Quando esta propriedade é definida, todos os e-mails são enviados para o endereço especificado nela. Esta propriedade destina-se a ser usada ao testar fluxos de trabalho. Por exemplo, quando você deseja ter certeza de que todos os e-mails são enviados sem enviá-los para os destinatários reais. |
TestDropPath | String | Quando essa propriedade é definida, todos os e-mails também são salvos no arquivo especificado. Esta propriedade destina-se a ser usada quando você estiver testando ou depurando fluxos de trabalho, para garantir que o formato e o conteúdo dos e-mails enviados sejam apropriados. |
Conteúdo da solução
A solução contém dois projetos.
Project | Description | Arquivos importantes |
---|---|---|
SendMail | A atividade SendMail | 1. SendMail.cs: execução para a atividade principal 2. SendMailDesigner.xaml e SendMailDesigner.xaml.cs: designer para a atividade SendMail 3. MailTemplateBody.htm: modelo para o e-mail a ser enviado. |
SendMailTestClient | Cliente para testar a atividade SendMail. Este projeto demonstra duas maneiras de invocar a atividade SendMail: declarativamente e programaticamente. | 1. Sequence1.xaml: fluxo de trabalho que invoca a atividade SendMail. 2. Program.cs: invoca Sequence1 e também cria um fluxo de trabalho programaticamente que usa SendMail. |
Configuração adicional da atividade SendMail
Embora não seja mostrado no exemplo, os usuários podem executar a configuração de adição da atividade SendMail. As próximas três seções demonstram como isso é feito.
Enviar um e-mail usando tokens especificados no corpo
Este trecho de código demonstra como você pode enviar e-mails com tokens no corpo. Observe como os tokens são fornecidos na propriedade body. Os valores para esses tokens são fornecidos para a propriedade tokens.
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)
};
Enviar um e-mail usando um modelo
Este trecho mostra como enviar um e-mail usando um token de modelo no corpo. Observe que, ao definir a BodyTemplateFilePath
propriedade, não precisamos fornecer o valor para a propriedade Body (o conteúdo do arquivo de modelo será copiado para o 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",
};
Enviando e-mails no modo de teste
Este trecho de código mostra como definir as duas propriedades de teste: definindo TestMailTo
para todas as mensagens serão enviadas para john.doe@contoso.con
(sem considerar os valores de Para, Cc, Bcc). Ao definir TestDropPath, todos os e-mails enviados também serão registrados no caminho fornecido. Estas propriedades podem ser definidas de forma independente (não estão relacionadas).
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\",
};
Instruções de configuração
O acesso a um servidor SMTP é necessário para este exemplo.
Para obter mais informações sobre como configurar um servidor SMTP, consulte os links a seguir.
Emuladores SMTP fornecidos por terceiros estão disponíveis para download.
Para executar este exemplo
Usando o Visual Studio, abra o arquivo de solução SendMail.sln.
Certifique-se de que tem acesso a um servidor SMTP válido. Consulte as instruções de configuração.
Configure o programa com o endereço do servidor e os endereços de e-mail De e Para.
Para executar corretamente este exemplo, talvez seja necessário configurar o valor dos endereços de email De e Para e o endereço do servidor SMTP no Program.cs e em Sequence.xaml. Você precisará alterar o endereço em ambos os locais, uma vez que o programa envia e-mail de duas maneiras diferentes
Para criar a solução, pressione CTRL+SHIFT+B.
Para executar a solução, pressione CTRL+F5.