Partilhar via


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

  1. Usando o Visual Studio, abra o arquivo de solução SendMail.sln.

  2. Certifique-se de que tem acesso a um servidor SMTP válido. Consulte as instruções de configuração.

  3. 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

  4. Para criar a solução, pressione CTRL+SHIFT+B.

  5. Para executar a solução, pressione CTRL+F5.