Crear mensajes de correo electrónico con opciones personalizadas en C#
Crear nuevo mensaje de correo electrónico
Para crear un nuevo mensaje de correo electrónico puede usar MailMessage clase. La clase MailMessage también inicializa propiedades del mensaje de correo creado, como la dirección de correo del remitente, las direcciones de los destinatarios, el asunto del correo y el contenido del cuerpo en formato HTML.
Considere el siguiente código, con pasos detallados, para crear un nuevo mensaje de correo electrónico y establecer sus propiedades.
- Crea una nueva instancia de la MailMessage clase.
- Establezca el From propiedad para la dirección de correo del remitente.
- Establezca el Para propiedad para una lista de direcciones de correo de los destinatarios separadas por comas.
- Establezca el Subject propiedad para el asunto del correo.
- Establezca el HtmlBody propiedad para el contenido HTML del cuerpo del correo.
// Create a new instance of MailMessage class
var message = new MailMessage
{
From = "from@domain.com",
To = "to1@domain.com, to2@domain.com",
Subject = "New message",
HtmlBody = @"<!DOCTYPE html>
<html>
<head>
<style>
h3{font-family:Verdana, sans-serif;color:#000000;background-color:#ffffff;}
p {font-family:Verdana, sans-serif;font-size:14px;font-style:normal;
font-weight:normal;color:#000000;background-color:#ffffff;}
</style>
</head>
<body>
<h3>New message</h3>
<p>This is a new message created by Aspose.Email.</p>
</body>
</html>"
};
Establecer codificación de texto predeterminada
Establezca la codificación de texto predeterminada para las siguientes propiedades:
- De: Nombre para mostrar
- Para: Nombre para mostrar
- Subject
- Cuerpo
Utilice el MailMessage.PreferredTextEncoding propiedad para garantizar que todo el texto en las propiedades anteriores esté codificado correctamente en el mensaje de correo electrónico. El siguiente fragmento de código muestra cómo usar una palabra francesa como nombre para mostrar de direcciones de correo, asunto y cuerpo.
Establecer cuerpo del correo
Establecer cuerpo de texto plano
El cuerpo del correo puede especificarse usando el Cuerpo propiedad del MailMessage clase.
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
Body = "This is a plain text body"
};
Establecer cuerpo HTML
El cuerpo del correo también puede especificarse usando HtmlBody propiedad del MailMessage clase.
// Declare message as MailMessage instance
var eml = new MailMessage
{
// Specify HtmlBody
HtmlBody = "<html><body>This is the HTML body</body></html>"
};
Establecer texto alternativo
Una vista alternativa en un archivo EML es una representación adicional del contenido del correo que puede usarse para proporcionar una renderización diferente del mensaje. Por ejemplo, si envía un mensaje en HTML, también podría proporcionar una versión plain text por si algunos destinatarios usan lectores de correo que no pueden mostrar contenido HTML. Para ese propósito use el AlternateView clase. Esta clase tiene dos propiedades, LinkedResources y BaseUri, que se usan para resolver URLs dentro del contenido del correo.
- LinkedResources es una colección de LinkedResource objetos. Cuando se renderiza, las URLs dentro del contenido del correo se comparan primero con las URLs en el Enlace de Contenido de cada LinkedResource objeto en el LinkedResources colección y resuelta.
- BaseUri es usado por el lector de correo para resolver URLs relativas dentro del cuerpo, y también para resolver URLs de enlaces de contenido relativos, en el LinkedResources colección.
Considere el siguiente código con pasos detallados para establecer un texto alternativo.
- Cree una instancia de MailMessage clase.
- Create AlternateView para ver un mensaje de correo usando el contenido especificado en la cadena.
- Agregar texto alternativo usando Agregar método de MailMessage.AlternateViews colección.
// Declare message as MailMessage instance
var eml = new MailMessage();
// Creates AlternateView to view an email message using the content specified in the //string
var alternate = AlternateView.CreateAlternateViewFromString("Alternate Text");
// Adding alternate text
eml.AlternateViews.Add(alternate);
Especificar codificación del cuerpo del correo
Aspose.Email usa el BodyEncoding propiedad del MailMessage clase para especificar la codificación del cuerpo del correo. Por ejemplo:
eml.BodyEncoding = Encoding.UTF8;
Especificar múltiples destinatarios
Hay tres maneras de especificar los destinatarios de un mensaje de correo: usando los campos To, CC o BCC.
-
El campo To es el destinatario principal de su mensaje. Puede ingresar una o más direcciones de correo en este campo, separadas por comas. El campo To es obligatorio para cada mensaje de correo.
-
El campo CC significa copia de carbón. Se utiliza para enviar una copia de su mensaje a otras personas que están interesadas o involucradas en el tema. El campo CC es opcional y también puede contener múltiples direcciones de correo. Los destinatarios en el campo CC pueden ver quién más recibió el mensaje.
-
El campo BCC significa copia de carbón oculta. Es similar al campo CC, pero los destinatarios en el campo BCC están ocultos para los demás destinatarios. El campo BCC es útil cuando desea proteger la privacidad de algunos destinatarios o evitar saturar sus bandejas de entrada con respuestas. El campo BCC también es opcional y puede contener múltiples direcciones de correo.
Considere el siguiente código, con pasos detallados, para especificar varios destinatarios para un mensaje de correo.
Pasos de código:
- Crea una nueva instancia de la MailMessage clase.
- Establezca el From propiedad para la dirección de correo del remitente.
- Establezca el Para propiedad a una matriz de direcciones de correo de los destinatarios principales.
- Establezca el CC propiedad a una matriz de direcciones de correo de los destinatarios que recibirán una copia del correo.
- Establezca el Bcc propiedad a una matriz de direcciones de correo de los destinatarios que recibirán una copia oculta del correo.
Ejemplo de código:
var eml = new MailMessage
{
// Specify From address
From = "sender@sender.com",
// Specify recipients’ mail addresses
To = {"receiver1@receiver.com", "receiver2@receiver.com", "receiver3@receiver.com"},
// Specify CC addresses
CC = {"CC1@receiver.com", "CC2@receiver.com"},
// Specify BCC addresses
Bcc = {"Bcc1@receiver.com", "Bcc2@receiver.com"}
};
Agregar nombres a mostrar a direcciones de correo
Junto con una dirección de correo electrónico, se puede incluir un display name para identificar al remitente o destinatario del correo. Puede incluir el nombre completo de una persona, apodo u otro identificador.
Cuando un mensaje de correo se muestra en un cliente de correo o en una interfaz webmail, el nombre a mostrar suele mostrarse junto a la dirección de correo electrónico, facilitando al usuario identificar quién envía el mensaje o a quién está dirigido. Para agregar nombres a mostrar a las direcciones de correo en un mensaje, considere el siguiente código con pasos detallados:
- Cargue el mensaje de correo desde un archivo usando
MailMessage.Loadmétodo. - Establezca el remitente del correo usando el
Frompropiedad del objeto eml creando un nuevoMailAddressobjeto con la dirección de correo electrónico y un nombre a mostrar del remitente. - Agregar un destinatario al correo usando el
Topropiedad del objeto eml, si es necesario agregar lista CC (Carbon Copy) usando elCCpropiedad, lista BCC (Blind Carbon Copy) usando elBccpropiedad y llamar alAddmétodo con un nuevoMailAddressobjeto que contiene la dirección de correo electrónico y un nombre a mostrar del destinatario.
Ejemplo de código:
// Load eml from file
var eml = MailMessage.Load(Data.Email/"test.eml");
eml.From = new MailAddress("TimothyFairfield@from.com", "Timothy Fairfield");
// A To address with a friendly name can also be specified like this
eml.To.Add(new MailAddress("kyle@to.com", "Kyle Huang"));
// Specify Cc and Bcc email address along with a friendly name
eml.CC.Add(new MailAddress("guangzhou@cc.com", "Guangzhou Team"));
eml.Bcc.Add(new MailAddress("ahaq@bcc.com", "Ammad ulHaq "));
Establecer propiedades adicionales
Con Aspose.Email puede utilizar propiedades adicionales del MailMessage clase como:
-
Date propiedad - establece date and time de un correo electrónico. Por defecto, la fecha es la fecha real cuando el mensaje fue enviado, y la hora es la hora en que fue enviado, según lo muestra Microsoft Outlook. Sin embargo, la hora real de entrega del correo es añadida por el propio servidor SMTP en el encabezado del correo. Por ejemplo, a continuación se muestra un encabezado de correo típico, donde Date establece el campo Date.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET // Add by SMTP server in delivery emails Received: from ip-123.56.99.216.dsl-cust.ca.inter.net ([216.99.56.123]) by Aspose.secureserver.net with MailEnable ESMTP; Thu, 22 Feb 2007 13:58:57 -0700 // Add by SMTP server in delivery emails Return-Path: <xyz@oikoscucine.it> // Add by SMTP server in delivery emails Received: from 195.120.225.20 (HELO mail.oikoscucine.it) by aspose.com with esmtp (:1CYY+<LA*- *1WK@) id Q8,/O/-.N83@7-9M for abc@aspose.com; Thu, 22 Feb 2007 20:58:51 +0300 From: "XYZ" <xyz@oikoscucine.it> To: <abc@aspose.com> Subject: For ABC // Date will set the Date field, outlook will show this as Date: Thu, 22 Feb 2007 20:58:51 +0300 Message-ID: <01c756c4$41b554d0$6c822ecf@dishonestyinsufferably> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0006_01C7569A.58DF4CD0" X-Mailer: Microsoft Office Outlook, Build 11.0.5510 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Thread-Index: Aca6Q:=ES0M(9-=(<.<1.<Q9@QE6CD== X-Read: 1 -
MailPriority enumeración - especifica los niveles de prioridad para el envío de un correo electrónico. Puede ser baja, normal o alta. La prioridad influye en la velocidad de transmisión y entrega.
-
MailSensitivity enumeración - especifica cinco niveles de sensibilidad.
-
XMailer- especifica el software que creó el mensaje de correo electrónico.
El fragmento de código a continuación ilustra cómo se pueden usar cada una de las propiedades discutidas arriba.
var eml = new MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text")
{
Date = DateTime.Now,
Priority = MailPriority.High,
Sensitivity = MailSensitivity.Normal,
Xmailer = "Aspose.Email"
};
Solicitar acuse de recibo
Para solicitar un acuse de recibo, use Aspose.Email DeliveryNotificationOptions propiedad del MailMessage clase. Esta propiedad contiene los valores de la DeliveryNotificationOptions enumeración.
Considere el siguiente ejemplo de código:
// Create an Instance of MailMessage class
var eml = new MailMessage
{
// Specify From, To, HtmlBody, DeliveryNotificationOptions field
From = "sender@sender.com",
To = "receiver@receiver.com",
HtmlBody = "<html><body>This is the Html body</body></html>",
DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess
};
eml.Headers.Add("Return-Receipt-To", "sender@sender.com");
eml.Headers.Add("Disposition-Notification-To", "sender@sender.com");
// Create an instance of SmtpClient Class
var client = new SmtpClient
{
// Specify your mailing host server, Username, Password and Port No
Host = "smtp.server.com",
Username = "Username",
Password = "Password",
Port = 25
};
try
{
// Client.Send will send this message
client.Send(eml);
// Display ‘Message Sent’, only if message sent successfully
Console.WriteLine(@"Message sent");
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.ToString());
}
Nota: Las solicitudes de acuse de recibo pueden no ser siempre respetadas porque:
- Un cliente de correo puede no implementar esa funcionalidad.
- El usuario final puede tener esa funcionalidad desactivada.
- El usuario final puede decidir no enviarlo.
Personalizar encabezados de correo electrónico
Los encabezados de correo electrónico representan un estándar de Internet y los RFC definen campos de encabezado que se incluyen en los mensajes de correo electrónico de Internet. Un encabezado de correo electrónico puede especificarse usando el MailMessage clase. Los tipos de encabezado comunes se definen en el HeaderType clase. Es una clase sellada que funciona como una enumeración normal.
Normalmente, un encabezado de correo electrónico contiene estos campos:
- To: Las direcciones de los destinatarios pueden especificarse en el campo To. Los destinatarios del campo To son la audiencia principal del mensaje. Puede haber más de una dirección de destinatario.
- From: Este campo muestra la dirección de correo del remitente del mensaje.
- Cc: Permite a los usuarios enviar un mensaje como "Copia de Carbón" o "Copia de Cortesía". Es decir, no se espera que el receptor responda o actúe. Normalmente se notifica al personal de supervisión con CC.
- Bcc: Significa Copia de Carbón Oculta (Blind Carbon Copy), lo que le permite enviar un correo a un destinatario que está oculto para los demás destinatarios.
- ReplyTo: Este campo de encabezado indica a dónde el remitente desea que lleguen las respuestas.
- Subject: Título, encabezado, asunto. A menudo se usa como indicador de hilo para mensajes que responden o comentan otros mensajes.
- Date: Este encabezado especifica una fecha (y hora). Normalmente es la fecha en que el mensaje fue redactado y enviado.
- XMailer: Información sobre el software cliente del originador. Ejemplo: X-Mailer: Aspose.Email XMailer es usado por los clientes de correo. Diferentes clientes de correo tendrán diferentes valores de XMailer. El valor XMailer de MS Outlook es Microsoft Office Outlook, Build 11.0.5510. Es ignorado por el receptor del correo o el lector de correo.
Normalmente, un encabezado de correo electrónico se ve algo como esto:
Reply-To: reply@reply.com
From: sender@sender.com
To: guangzhou@guangzhoo.com
Subject: test mail
Date: 6 Mar 2006 8:2:2 +0800
X-Mailer: Aspose.Email
Para personalizar un encabezado de correo electrónico, siga estos pasos de código:
- Cree una instancia de la MailMessage clase.
- Especifique To, From, Cc, Bcc, ReplyTo, Subject, Date y XMailer usando una instancia de MailMessage.
- Cree una instancia de la MimeHeader clase y especifique el encabezado personalizado.
- Añada el encabezado personalizado al MailMessage instancia.
El siguiente fragmento de código muestra cómo establecer encabezados de correo electrónico.
var eml = new MailMessage
{
ReplyToList = "reply@reply.com",
From = "sender@sender.com",
To = "receiver1@receiver.com",
CC = "receiver2@receiver.com",
Bcc = "receiver3@receiver.com",
Subject = "test mail",
Date = new System.DateTime(2006, 3, 6),
XMailer = "Aspose.Email"
};
El fragmento de código anterior produce un encabezado de correo en el siguiente formato:
Reply-To: reply@reply.com
From: sender@sender.com
To: receiver1@receiver.com
CC: receiver2@receiver.com
BCC: receiver3@receiver.com
Subject: test mail
Date: 6 Mar 2006 8:2:2 +0800
X-Mailer: Aspose.Email
Insertar un encabezado en una ubicación específica
El Agregar método del HeaderCollection la clase inserta un encabezado al final de la colección. Sin embargo, a veces puede ser necesario insertar un encabezado en una ubicación específica. En tal caso, el Agregar el método no será de ayuda. Para lograr esto, usa el Insert método del HeaderCollection. Si la colección contiene encabezados con el mismo nombre, este encabezado se insertará antes que los demás encabezados con el mismo nombre. El siguiente fragmento de código muestra cómo insertar un encabezado en una ubicación específica.
eml.Headers.Insert("Received", "Value");
Añadir encabezados personalizados
Un encabezado de correo puede especificarse usando el MailMessage clase. Para especificar un encabezado personalizado en un mensaje de correo, considere el siguiente ejemplo de código:
eml.Headers.Add("secret-header", "mystery");
El fragmento de código anterior produce un encabezado de correo en el siguiente formato:
secret-header: mystery
Crear mensajes firmados
La API Aspose.Email brinda la capacidad de crear mensajes firmados usando certificados. La AttachSignature método del MailMessage la clase puede usarse para firmar un mensaje para guardarlo o incluso enviarlo usando el SmtpClient.
Firmar un mensaje
El siguiente fragmento de código le muestra cómo firmar un mensaje.
Usando la opción de certificado separado
Los clientes de correo electrónico basados en web pueden no ser capaces de mostrar el contenido del cuerpo de un Mensaje firmado. Esto puede solucionarse separando el certificado antes de enviarlo a clientes web. La bandera detached en el método sobrecargado de AttachSignature puede usarse para lograr esto. Si se establece en true, el certificado se separa del correo y viceversa. Para ver el cuerpo del Mensaje firmado en clientes web, necesita crear MailMessage con firma separada. El siguiente fragmento de código le muestra cómo usar la opción de certificado separado.