Cargando y Guardando Mensajes

Cargando y Guardando Mensajes de Correo

Detectar un Formato de Archivo

La API Aspose.Email ofrece la capacidad de detectar el formato de archivo del mensaje proporcionado. El DetectFileFormat método del FileFormatUtil la clase puede usarse para lograr esto. Las siguientes clases y métodos pueden usarse para detectar el formato del archivo cargado.

El siguiente fragmento de código te muestra cómo detectar formatos de archivo.

Cargar un Mensaje de Correo

Para cargar un mensaje con opciones de carga específicas, Aspose.Email proporciona el LoadOptions clase que puede usarse de la siguiente manera:

Preservar el Formato del Mensaje Embebido durante la Carga

Guardar y Convertir Mensajes de Correo

Aspose.Email facilita la conversión de cualquier tipo de mensaje a otro formato. Para demostrar esta característica, el código de este artículo carga tres tipos de mensajes desde el disco y los guarda nuevamente en otros formatos. La clase base SaveOptions y las clases EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions para configuraciones adicionales al guardar MailMessage puede usarse para guardar mensajes en otros formatos. El artículo muestra cómo usar estas clases para guardar un correo de ejemplo como:

  • Formato EML.
  • Outlook MSG.
  • Formato MHTML.
  • Formato HTML.

Cargar y Guardar un Mensaje de Correo

El siguiente fragmento de código te muestra cómo cargar un mensaje EML y guardarlo en disco en el mismo formato.

Cargar y Guardar un Mensaje de Correo Preservando los Límites Originales

El siguiente fragmento de código te muestra cómo cargar EML y guardarlo como EML preservando los límites originales.

Guardando como EML Preservando Adjuntos TNEF

El siguiente fragmento de código te muestra cómo guardar como EML preservando los archivos adjuntos TNEF.

Guardar EML a MSG

El siguiente fragmento de código te muestra cómo cargar un mensaje EML y convertirlo a MSG utilizando la opción adecuada de SaveOptions.

Guardar EML a MSG con Fechas Preservadas

El MsgSaveOptions la clase te permite guardar el mensaje de origen como un archivo de Outlook Message (MSG) preservando fechas. El siguiente fragmento de código muestra cómo guardar como MSG con Fechas Preservadas.

Guardar EML como MHTML

Diferentes opciones de MHTML pueden usarse para obtener los resultados deseados. El siguiente fragmento de código te muestra cómo cargar un mensaje EML en MailMessage y convertirlo a MHTML con una fecha de mensaje en el sistema UTC.

// Set options for MHTML output
MhtSaveOptions saveOptions = SaveOptions.getDefaultMhtml();
// save a message date as UTC date
saveOptions.setPreserveOriginalDate(false);

// Initialize and load an existing EML file
try (MailMessage mailMessage = MailMessage.load(dataDir + "Message.eml")) {
    mailMessage.save(outDir + "Message_out.mhtml", saveOptions);
}

Formatear Encabezados MHT Globalmente al Guardar desde EML

Con Aspose.Email, puedes usar las opciones de formato global para el encabezado Mht. Las opciones globales establecen el formato común de un encabezado Mht para todos los MhtSaveOptions instancias. Esta característica está diseñada para evitar establecer formato para cada instancia de MhtSaveOptions.

Usa los siguientes métodos del GlobalFormattingOptions clase y el ejemplo de código a continuación para establecer el formato de un encabezado Mht:

// saveOptions1 and saveOptions2 have the same mht header formatting
MhtSaveOptions saveOptions1 = new MhtSaveOptions();
MhtSaveOptions saveOptions2 = new MhtSaveOptions();

Convertir EML a MHTML con Configuraciones Opcionales

El MhtSaveOptions la clase proporciona opciones adicionales para guardar mensajes de correo en formato MHTML. El enumerador MhtFormatOptions permite escribir información adicional del correo al MHTML de salida. Los siguientes campos adicionales pueden escribirse:

  • WriteHeader - escribe el encabezado del correo al archivo de salida.
  • WriteOutlineAttachments - escribe los adjuntos de esquema al archivo de salida.
  • WriteCompleteEmailAddress - escribe la dirección de correo completa al archivo de salida.
  • NoEncodeCharacters - no se debe usar codificación de transferencia de caracteres.
  • HideExtraPrintHeader - oculta el encabezado de impresión extra en la parte superior del archivo de salida.
  • WriteCompleteToEmailAddress - escribe la dirección de correo completa del destinatario al archivo de salida.
  • WriteCompleteFromEmailAddress - escribe la dirección de correo completa del remitente al archivo de salida.
  • WriteCompleteCcEmailAddress - escribe las direcciones de correo completas de cualquier destinatario en copia al archivo de salida.
  • WriteCompleteBccEmailAddress - escribe la dirección de correo completa de cualquier destinatario en copia oculta al archivo de salida.
  • RenderCalendarEvent - escribe texto del evento de calendario al archivo de salida.
  • SkipByteOrderMarkInBody - escribe los bytes de marca de orden de bytes (BOM) al archivo de salida.
  • RenderVCardInfo - escribe texto de la Vista Alternativa VCard al archivo de salida.
  • DisplayAsOutlook - muestra el encabezado De.
  • RenderTaskFields - escribe campos específicos de Tarea al archivo de salida.
  • Ninguno - No se especificó configuración.

El siguiente fragmento de código te muestra cómo convertir archivos EML a MHTML con configuraciones opcionales.

Renderizar Eventos del Calendario al Convertir a MHTML

El MhtFormatOptions.RenderCalendarEvent renderiza los eventos del Calendario al MTHML de salida. El siguiente fragmento de código muestra cómo renderizar eventos del calendario mientras se convierte a MHTML.

Exportar Correo a MHT sin Imágenes Inline

Exportar correo electrónico a MHT con zona horaria personalizada

MailMessage class proporciona el setTimeZoneOffset propiedad para establecer la zona horaria personalizada al exportar a MHT. El siguiente fragmento de código le muestra cómo exportar correo electrónico a MHT con zona horaria personalizada.

MailMessage msg = MailMessage.load(filename, new MsgLoadOptions());
msg.setDate(new Date());

// Set the timezone offset in milliseconds
msg.setTimeZoneOffset(5*60*60*1000);

MhtSaveOptions mhtOptions = new MhtSaveOptions();
mhtOptions.setMhtFormatOptions(MhtFormatOptions.WriteHeader);
msg.save(dataDir + "ExportToMHTWithCustomTimezone_out.mhtml", mhtOptions);

Exportar correo electrónico a EML

El siguiente fragmento de código le muestra cómo exportar correos electrónicos a EML.

Guardar correo electrónico como HTML

El HtmlSaveOptions la clase le permite exportar el cuerpo del mensaje a HTML. El siguiente fragmento de código le muestra cómo guardar un mensaje como HTML.

Guardar mensaje de correo electrónico como HTML con ruta relativa a los recursos

Al exportar mensajes de correo electrónico al formato HTML, es posible elegir guardar los recursos del correo con rutas relativas. Esta característica brinda mayor flexibilidad en cómo se vinculan los recursos en el archivo HTML de salida, facilitando compartir y mostrar los correos guardados en diferentes sistemas. El HtmlSaveOptions.UseRelativePathToResources la propiedad proporciona la capacidad de guardar recursos con rutas relativas. 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 ResourceHtmlRenderingHandler evento.

Guardar con ruta relativa predeterminada a los recursos

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(true);

msg.save("target.html", htmlSaveOptions);

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

Guardar con ruta absoluta a los recursos

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);

msg.save("target.html", htmlSaveOptions);

Al igual que en el primer caso, los recursos se guardarán por defecto en la carpeta [nombre del archivo html].files, pero el HTML hará referencia a los recursos usando rutas absolutas.

Ruta relativa personalizada usando el evento ResourceHtmlRenderingHandler

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);

htmlSaveOptions.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {
    @Override
    public void invoke(Object sender, ResourceHtmlRenderingEventArgs args) {
        if (sender instanceof AttachmentBase) {
            AttachmentBase attachment = (AttachmentBase) sender;
            // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
            args.setPathToResourceFile("images\\" + attachment.getContentType().getName());
        }
    }
});

msg.save(targetPath + "A Day in the Park.html", htmlSaveOptions);

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

Conservar íconos personalizados en un mensaje al convertir a HTML

A veces, el mensaje contiene adjuntos en línea, que se muestran como imágenes de ícono en el cuerpo del mensaje. Tales mensajes pueden generar problemas al convertirlos a HTML, ya que se pierden las imágenes de los íconos. Esto se debe a que los íconos de los adjuntos no se almacenan directamente en el mensaje.

El usuario de Aspose.Email puede personalizar los íconos de los adjuntos al convertir el mensaje a HTML. Para ello, el HtmlSaveOptions.ResourceHtmlRendering el evento se usa para personalizar la renderización de archivos de recursos (como adjuntos) al guardar un mensaje de correo electrónico como archivo HTML. En el ejemplo de código a continuación, el controlador de eventos se usa para establecer dinámicamente la ruta a los archivos de recursos (iconos) según el tipo de contenido del adjunto. Esto permite una renderización personalizada de los recursos en la salida HTML según su tipo de archivo.


 HtmlSaveOptions options = new HtmlSaveOptions();

options.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {

   @Override

   public void invoke(Object sender, ResourceHtmlRenderingEventArgs e) {

        AttachmentBase attachment = (AttachmentBase) sender;

        e.setCaption(attachment.getContentType().getName());

       if (attachment.getContentType().getName().endsWith(".pdf")) {

            e.setPathToResourceFile("pdf_icon.png");

       } else if (attachment.getContentType().getName().endsWith(".docx")) {

            e.setPathToResourceFile("word_icon.jpg");

       } else if (attachment.getContentType().getName().endsWith(".jpg")) {

            e.setPathToResourceFile("jpeg_icon.png");

       } else {

            e.setPathToResourceFile("not_found_icon.png");

       }

   }

});

options.setResourceRenderingMode(ResourceRenderingMode.SubstituteFromFile);

String fileName = "message.msg";

MailMessage mailMessage = MailMessage.load(fileName);

mailMessage.save("fileName.html", options);

Establecer hora y zona horaria al guardar EML como HTML

Los usuarios de Aspose.Email pueden establecer los formatos de visualización de hora y zona horaria en HtmlSaveOptions. El HeadersFormattingOptions la clase permite especificar opciones de formato de encabezados al guardar MailMessage en formato MHTML o HTML. Los siguientes métodos de la HtmlFormatOptions la clase especifica los campos que se mostrarán en el archivo de salida:

  • RenderCalendarEvent - Indica que el texto del evento del calendario debe escribirse en el MHTML de salida.
  • RenderVCardInfo - Indica que el texto de VCard AlternativeView debe escribirse en el HTML de salida.

El siguiente ejemplo de código muestra cómo establecer la hora y la zona horaria al guardar EML como HTML:

MailMessage msg = MailMessage.load("fileName");
HtmlSaveOptions options = new HtmlSaveOptions();
options.setHtmlFormatOptions(HtmlFormatOptions.WriteHeader);
options.getFormatTemplates().set_Item("DateTime", "MM d yyyy HH:mm tt");

Guardar como HTML sin incrustar recursos

Guardar un mensaje como plantilla de Outlook (.oft)

El siguiente fragmento de código le muestra cómo guardar un mensaje como una plantilla de Outlook (.oft).