Gestionar mensajes Outlook

Guardar Correos como HTML

Aspose.Email permite guardar los recursos de correo electrónico con rutas relativas al exportar mensajes al formato HTML. Esta característica brinda mayor flexibilidad en cómo se enlazan los recursos en el archivo HTML resultante, facilitando compartir y mostrar correos guardados en diferentes sistemas. Para guardar los recursos con rutas relativas, use HtmlSaveOptions.UseRelativePathToResources propiedad. El valor predeterminado de la propiedad es false (los recursos se guardan con rutas absolutas). Cuando se establece en true, los recursos se guardan con rutas relativas.

Los archivos HTML con rutas relativas son más portátiles y pueden verse correctamente sin importar la estructura de archivos del entorno de alojamiento. Puede elegir entre rutas absolutas y relativas según los requisitos. Puede definir rutas personalizadas para los recursos usando el ResourceHtmlRendering evento.

El siguiente ejemplo de código demuestra cómo guardar un correo electrónico con la ruta relativa predeterminada a los recursos:

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

En este caso, los recursos se guardarán en la carpeta [html file name]_files, en la misma ruta que el archivo .html y el HTML hará referencia a los recursos mediante rutas relativas.

El ejemplo de código a continuación demuestra cómo guardar con ruta absoluta a los recursos:

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = false
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

Al igual que en el primer caso, los recursos se guardarán en la carpeta [html file name]_files de forma predeterminada, pero el HTML hará referencia a los recursos usando rutas absolutas.

Al usar el ResourceHtmlRendering evento, puede establecer rutas relativas o absolutas personalizadas para los recursos. Al personalizar rutas con el ResourceHtmlRendering controlador de eventos, y ya que UseRelativePathToResources está configurado a true, debe asignar una ruta relativa al PathToResourceFile propiedad para garantizar referencias correctas.

El siguiente ejemplo de código demuestra cómo personalizar la ruta relativa usando el evento ResourceHtmlRendering

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

htmlSaveOptions.ResourceHtmlRendering += (o, args) =>
{
    if (o is AttachmentBase attachment)
    {
	    // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
        args.PathToResourceFile = $@"images\{attachment.ContentType.Name}";
    }
};

msg.Save(Path.Combine(targetPath, "A Day in the Park.html"), htmlSaveOptions);

Convertir MSG a Mensajes MIME

La API Aspose.Email brinda la capacidad de convertir archivos MSG a mensajes MIME usando el ToMailMessage método.

Establecer Tiempos de Espera para la Conversión y Carga de Mensajes

Las siguientes características le permitirán establecer el tiempo de espera en milisegundos para el proceso de conversión y carga:

El siguiente ejemplo de código le mostrará cómo establecer un tiempo de espera al convertir un mensaje:

var options = new MailConversionOptions();
// Set the timeout to 5 seconds
options.Timeout = 5000;

options.TimeoutReached += (object sender, EventArgs args) =>
{
    string subj = (sender as MailMessage).Subject;
	 // Set a flag indicating the timeout was reached
    isTimedOut = true;
};

var mailMessage = mapiMessage.ToMailMessage(options);

Conversión de MSG a EML Conservando cuerpo RTF

La conversión de un archivo MSG a EML preservando el cuerpo RTF puede hacerse de dos maneras:

Ambas propiedades obtienen o establecen un valor que indica si se debe conservar el cuerpo rtf en MailMessage.

Los siguientes fragmentos de código muestran cómo convertir un archivo MSG a EML y preservar el cuerpo RTF:

var loadOptions = new MsgLoadOptions
{
    PreserveRtfContent = true
};

var eml = MailMessage.Load("my.msg", loadOptions);
var conversionOptions = new MailConversionOptions
{
    PreserveRtfContent = true
};

var msg = MapiMessage.Load("my.msg");

var eml = msg.ToMailMessage(conversionOptions);

Manejo de Archivos de Plantilla de Outlook (.OFT)

Las plantillas de Outlook son muy útiles cuando desea enviar un mensaje de correo similar una y otra vez. En lugar de preparar el mensaje desde cero cada vez, primero prepare el mensaje en Outlook y guárdelo como una Plantilla de Outlook (OFT). Después, siempre que necesite enviar el mensaje, puede crearlo a partir de la plantilla, ahorrando tiempo al escribir el mismo texto en el cuerpo o la línea de asunto, configurar el formato, etc. Aspose.Email ofrece MailMessage la clase puede usarse para cargar y leer un archivo de plantilla de Outlook (OFT). Una vez que la plantilla de Outlook se carga en una instancia de la MailMessage clase, puede actualizar el remitente, destinatario, cuerpo, asunto y otras propiedades. Después de actualizar las propiedades:

  • Enviar el correo usando el SmtpClient clase o
  • Guardar el mensaje como MSG y realizar más actualizaciones/validaciones usando Microsoft Outlook.

En los ejemplos de código a continuación, nosotros:

  1. Cargar la plantilla usando el MailMessage clase.
  2. Actualizar algunas de las propiedades.
  3. Guardar el mensaje en formato MSG.

El siguiente fragmento de código muestra cómo cargar el archivo OFT, actualizar el mensaje y guardarlo en formato MSG.

Guardar Archivos MSG como Plantillas

El siguiente fragmento de código le muestra cómo guardar el archivo MSG de Outlook como una plantilla.

Determinar tipo de mensaje MAPI (OFT o MSG)

Al cargar un objeto MapiMessage desde un archivo, puede ser necesario determinar si el mensaje cargado es un archivo de plantilla o un correo electrónico normal. Al utilizar el IsTemplate propiedad del MapiMessage Con la clase, puedes detectar con precisión si un correo electrónico es una plantilla o no. Esta funcionalidad puede ser valiosa al manejar y procesar varios tipos de archivos de correo dentro de aplicaciones y sistemas.

El siguiente ejemplo de código muestra cómo determinar si un MapiMessage es OFT o MSG:

var msg = MapiMessage.Load("message.msg");
var isOft = msg.IsTemplate; // returns false

var msg = MapiMessage.Load("message.oft");
var isOft = msg.IsTemplate; // returns true

Guardar MapiMessage o MailMessage en formato OFT

El SaveOptions La clase permite especificar opciones adicionales al guardar un MailMessage o MapiMessage en un formato determinado.

El siguiente ejemplo de código demuestra cómo guardar un mensaje en formato OFT:

// Save the MailMessage to OFT format
using (var eml = MailMessage.Load("message.eml"))
{
    eml.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);

}

// Save the MapiMessage to OFT format
using (var msg = MapiMessage.Load("message.msg"))
{
    msg.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
}

Administrar mensajes firmados digitalmente

Aspose.Email implementa el algoritmo completo del objeto de correo S/MIME. Esto brinda a la API la capacidad total de preservar firmas digitales al convertir mensajes entre formatos.

Preservar Firma durante la Conversión de EML a MSG

Aspose.Email conserva la firma digital al convertir de EML a MSG. El siguiente fragmento de código le muestra cómo convertir de EML a MSG.

Convertir mensajes S/MIME de MSG a EML

Aspose.Email conserva la firma digital al convertir de MSG a EML como se muestra en el siguiente fragmento de código.

Comprobar firmas de correos seguros

Las siguientes funciones están disponibles para verificar la firma de objetos MapiMessage.

El siguiente ejemplo de código muestra cómo implementar las funciones en su proyecto:

var msg = MapiMessage.Load(fileName, new EmlLoadOptions());
var result = new SecureEmailManager().CheckSignature(msg);

var certFileName = "cert.pfx";
var cert = new X509Certificate2(certFileName, "pass");
var eml = MapiMessage.Load(fileName);
var store = new X509Store();
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

var result = new SecureEmailManager().CheckSignature(eml, cert, store);

Eliminar firmas de MapiMessages

Para una mejor compatibilidad, el MapiMessage.RemoveSignature método y MapiMessage.IsSigned las propiedades se usan para eliminar una firma digital de un mensaje.

El siguiente fragmento de código muestra cómo implementar estas funciones en su proyecto:

var msg = MapiMessage.Load(fileName);

if (msg.IsSigned)
{
    var unsignedMsg = msg.RemoveSignature();
}

Descifrar MapiMessages con certificados

Si tiene mensajes MAPI cifrados y necesita descifrarlos usando la clave privada almacenada en un certificado, las siguientes funciones de Aspose.Email pueden ser útiles:

El siguiente fragmento de código muestra cómo trabajar con mensajes MAPI cifrados:

var privateCert = new X509Certificate2(privateCertFile, "password");
var msg = MapiMessage.Load("encrypted.msg");

if (msg.IsEncrypted);
{
    var decryptedMsg = msg.Decrypt(privateCert);
}

Establecer categorías de color para archivos MSG

Una categoría de color marca un mensaje de correo electrónico con algún tipo de importancia o categoría. Microsoft Outlook permite a los usuarios asignar categorías de color para diferenciar correos. Para manejar la categoría de color, use el FollowUpManager. Contiene funciones como AddCategory, RemoveCategory, ClearCategories y GetCategories.

  • AddCategory toma MapiMessage y la cadena de categoría de color, por ejemplo, "Categoría Púrpura" o "Categoría Roja" como argumentos.
  • RemoveCategory toma MapiMessage y la cadena de categoría de color que se eliminará del mensaje.
  • ClearCategories se utiliza para eliminar todas las categorías de color del mensaje.
  • GetCategories se utiliza para recuperar todas las categorías de color de un mensaje en particular.

El siguiente ejemplo realiza las tareas descritas a continuación:

  1. Agregar una categoría de color.
  2. Agregar otra categoría de color.
  3. Recuperar la lista de todas las categorías.
  4. Eliminar todas las categorías.

Acceder a información de seguimiento en archivos MSG

La API Aspose.Email proporciona la capacidad de acceder a la información de seguimiento de un mensaje enviado o recibido. Puede recuperar la información de lectura, recibo de entrega y resultados de votación de un archivo de mensaje.

Recuperar información de acuse de lectura y entrega

El siguiente fragmento de código le muestra cómo recuperar la información de recibos de lectura y entrega.

Crear mensajes de reenvío y respuesta

La API de Aspose.Email proporciona la capacidad de crear y formatear los mensajes de reenvío y respuesta. La ReplyMessageBuilder y ForwardMessageBuilder las clases de la API se usan para crear respectivamente los mensajes Reply y Forward. Un mensaje Reply o Forward puede especificarse para crearse usando cualquiera de los modos de OriginalMessageAdditionMode enumeración. Esta enumeración tiene los siguientes valores:

  • OriginalMessageAdditionMode.None - El mensaje original no se incluye en el mensaje de respuesta.
  • OriginalMessageAdditionMode.Attachment - El mensaje original se incluye como adjunto en el mensaje de respuesta
  • OriginalMessageAdditionMode.Textpart - El mensaje original se incluye como texto en el cuerpo del mensaje de respuesta

Crear mensajes de respuesta

El siguiente fragmento de código muestra cómo crear un mensaje de respuesta.

Crear mensajes de reenvío

El siguiente fragmento de código muestra cómo crear un mensaje de reenvío.