Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
Con Visual Studio, abra el archivo de solución SendMail.sln.
Asegúrese de que tiene acceso a un servidor SMTP válido. Consulte las instrucciones de configuración.
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.
Para compilar la solución, presione Ctrl+MAYÚS+B.
Para ejecutar la solución, presione CTRL+F5.