Compartir vía


Actividad personalizada SendMail

En el ejemplo SendMail se muestra cómo crear una actividad personalizada que deriva de AsyncCodeActivity para enviar correo mediante SMTP para su uso en una aplicación de flujo de trabajo. La actividad personalizada usa las funcionalidades de SmtpClient para enviar correo electrónico de forma asincrónica y para enviar correo con autenticación. También proporciona algunas características del usuario final, como el modo de prueba, el reemplazo de tokens, las plantillas de archivo y la ruta de eliminación de pruebas.

En la tabla siguiente se detallan los argumentos de la SendMail actividad.

Nombre Tipo Descripción
Anfitrión Cuerda Dirección del host del servidor SMTP.
Puerto Cuerda Puerto del servicio SMTP en el host.
EnableSsl booleano Especifica si SmtpClient utiliza la capa de sockets seguros (SSL) para cifrar la conexión.
Nombre de usuario Cuerda Nombre de usuario para configurar las credenciales para autenticar la propiedad sender Credentials .
Contraseña Cuerda Contraseña para configurar las credenciales para autenticar la propiedad del remitente Credentials .
Asunto InArgument<T> <cadena> Asunto del mensaje.
Cuerpo InArgument<T> <cadena> Cuerpo del mensaje.
Datos adjuntos InArgument<T> <cadena> Colección de adjuntos utilizada para almacenar los datos asociados a este mensaje de correo electrónico.
Desde MailAddress Dirección del remitente de este mensaje de correo electrónico.
En InArgument<T><MailAddressCollection> Colección de direcciones que contiene los destinatarios de este mensaje de correo electrónico.
CC InArgument<T><MailAddressCollection> Colección de direcciones que contiene los destinatarios de copia carbón (CC) de este mensaje de correo electrónico.
CCO InArgument<T><MailAddressCollection> Colección de direcciones que contiene los destinatarios de copia carbón oculta (CCO) de este mensaje de correo electrónico.
Fichas InArgument<T> <IDictionary<cadena, cadena>> Tokens para reemplazar en el cuerpo. Esta característica permite a los usuarios especificar valores en el cuerpo que pueden ser reemplazados más adelante por los tokens proporcionados mediante esta propiedad.
BodyTemplateFilePath Cuerda Ruta de acceso de una plantilla para el cuerpo. La actividad SendMail copia el contenido de este archivo en su propiedad de cuerpo.

La plantilla puede contener tokens que son reemplazados por el contenido de la propiedad de tokens.
TestMailTo MailAddress Cuando se establece esta propiedad, todos los correos electrónicos se envían a la dirección especificada en ella.

Esta propiedad está pensada para usarse al probar flujos de trabajo. Por ejemplo, si desea asegurarse de que todos los correos electrónicos se envían sin enviarlos a los destinatarios reales.
TestDropPath Cuerda Cuando se establece esta propiedad, todos los correos electrónicos también se guardan en el archivo especificado.

Esta propiedad está pensada para usarse al probar o depurar flujos de trabajo, para asegurarse de que el formato y el contenido de los correos electrónicos salientes sean adecuados.

Contenido de la solución

La solución contiene dos proyectos.

Proyecto Descripción Archivos importantes
SendMail La actividad SendMail 1. SendMail.cs: implementación de la actividad principal
2. SendMailDesigner.xaml y SendMailDesigner.xaml.cs: diseñador para la actividad SendMail
3. MailTemplateBody.htm: plantilla para el correo electrónico que se va a enviar.
SendMailTestClient Cliente para probar la actividad SendMail. En este proyecto se muestran dos formas de invocar la actividad SendMail: mediante declaración y mediante programación. 1. Sequence1.xaml: flujo de trabajo que invoca la actividad SendMail.
2. Program.cs: invoca Sequence1 y también crea un flujo de trabajo mediante programación que usa SendMail.

Configuración adicional de la actividad SendMail

Aunque no se muestra en el ejemplo, los usuarios pueden realizar una configuración adicional de la actividad SendMail. En las tres secciones siguientes se muestra cómo se hace esto.

Enviar un correo electrónico mediante los tokens especificados en el cuerpo

Este fragmento de código muestra cómo puede enviar correo electrónico con tokens en el cuerpo. Observe que los tokens se proporcionan en la propiedad del cuerpo. Los valores para esos tokens se proporcionan a la propiedad de 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)
};

Envío de un correo electrónico mediante una plantilla

Este fragmento de código muestra cómo enviar un correo electrónico utilizando tokens de plantilla dentro del cuerpo del mensaje. Observe que al establecer la BodyTemplateFilePath propiedad no es necesario proporcionar el valor de la propiedad Body (el contenido del archivo de plantilla se copiará en el cuerpo).

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",
};

Envío de correos en modo de prueba

Este fragmento de código muestra cómo establecer las dos propiedades de prueba: estableciendo TestMailTo en todos los mensajes se enviará john.doe@contoso.con a (sin tener en cuenta los valores de To, Cc, Bcc). Al establecer TestDropPath todos los correos electrónicos salientes también se registrarán en la ruta de acceso proporcionada. Estas propiedades se pueden establecer de forma independiente (no están 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\",
};

Instrucciones de instalación

Para este ejemplo se requiere acceso a un servidor SMTP.

Para obtener más información sobre cómo configurar un servidor SMTP, consulte los vínculos siguientes.

Los emuladores SMTP proporcionados por terceros están disponibles para su descarga.

Para ejecutar este ejemplo

  1. Con Visual Studio, abra el archivo de solución SendMail.sln.

  2. Asegúrese de que tiene acceso a un servidor SMTP válido. Consulte las instrucciones de configuración.

  3. Configure el programa con la dirección del servidor y las direcciones de correo electrónico de origen y destino.

    Para ejecutar correctamente este ejemplo, es posible que deba configurar el valor de Las direcciones de correo electrónico From y To y la dirección del servidor SMTP en Program.cs y en Sequence.xaml. Tendrá que cambiar la dirección en ambas ubicaciones, ya que el programa envía correo de dos maneras diferentes.

  4. Para compilar la solución, presione Ctrl+MAYÚS+B.

  5. Para ejecutar la solución, presione CTRL+F5.