Cargando, guardando y convirtiendo correos

Detección de formatos de archivo de correo electrónico

La API Aspose.Email proporciona la capacidad de detectar el formato de archivo del mensaje proporcionado. El DetectFileFormat método de 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 muestra cómo detectar formatos de archivo:

from aspose.email.tools import FileFormatUtil

# Detect file format and get the detected load format
info = FileFormatUtil.detect_file_format(data_dir + "message.msg")
print("The message format is: " + str(info.file_format_type))

Cargando un mensaje con opciones de carga

El siguiente fragmento de código muestra cómo cargar un mensaje con opciones de carga.

from aspose.email import MailMessage, EmlLoadOptions, HtmlLoadOptions, MhtmlLoadOptions, MsgLoadOptions

# Load Eml, html, mhtml, msg, and dat files
mail_message = MailMessage.load(data_dir + "message.eml", EmlLoadOptions())
MailMessage.load(data_dir + "description.html", HtmlLoadOptions())
MailMessage.load(data_dir + "message.mhtml", MhtmlLoadOptions())
MailMessage.load(data_dir + "message.msg", MsgLoadOptions())

# Loading with custom options
eml_load_options = EmlLoadOptions()
eml_load_options.preferred_text_encoding = "utf-8"
eml_load_options.preserve_tnef_attachments = True

MailMessage.load(data_dir + "description.html", eml_load_options)

html_load_options = HtmlLoadOptions()
html_load_options.preferred_text_encoding = "utf-8"
html_load_options.should_add_plain_text_view = True
html_load_options.path_to_resources = data_dir

MailMessage.load(data_dir + "description.html", html_load_options)

Conservando el formato de mensaje incrustado durante la carga

from aspose.email import MailMessage, EmlLoadOptions, HtmlLoadOptions, MhtmlLoadOptions, MsgLoadOptions
from aspose.email.tools import FileFormatUtil

eml_load_options = EmlLoadOptions()
eml_load_options.preserve_embedded_message_format = True

mail = MailMessage.load(data_dir + "message.eml", eml_load_options)

file_format = FileFormatUtil.detect_file_format(mail.attachments[0].content_stream).file_format_type

print("Embedded message file format: " + str(file_format))

Guardando y convirtiendo correos

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 puede usarse para configuraciones adicionales al 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.

Guardando como EML

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

from aspose.email import MailMessage, SaveOptions

# Initialize and Load an existing EML file by specifying the MessageFormat
mail_message = MailMessage.load(data_dir + "message.eml")

mail_message.save(data_dir + "LoadAndSaveFileAsEML_out.eml", SaveOptions.default_eml)

Conservando límites en archivos EML

El siguiente fragmento de código muestra cómo cargar un archivo EML y guardarlo en el mismo formato conservando los límites originales.

from aspose.email import MailMessage, EmlSaveOptions, MailMessageSaveType

mail_message = MailMessage.load(data_dir + "message.eml")

# Save as eml with preserved original boundaries
eml_save_options = EmlSaveOptions(MailMessageSaveType.eml_format)

mail_message.save(data_dir + "PreserveOriginalBoundaries_out.eml", eml_save_options)

Personalizar cadenas de límite MIME

Aspose.Email para .NET permite configurar la plantilla de límite usada en mensajes MIME. Esto se logra a través del boundaries_template propiedad del EmlSaveOptions clase.

Al establecer una plantilla personalizada, puedes definir cómo se generan los límites MIME. El comodín {#} en la plantilla será reemplazado por un número de límite incremental, lo que permite cadenas de límite dinámicas y legibles.

Si boundaries_template no está configurado (el valor predeterminado es None), la biblioteca usa su formato interno de límite.

El siguiente ejemplo de código muestra cómo personalizar las cadenas de límite MIME al guardar un mensaje de correo en formato .eml:

import aspose.email as ae

# Create a sample MailMessage
message = ae.MailMessage()
message.subject = "Custom MIME Boundary"
message.body = "This message uses a custom MIME boundary template."
message.to.append(ae.MailAddress("recipient@example.com"))

# Configure save options with a custom boundary template
save_options = ae.EmlSaveOptions(ae.MailMessageSaveType.EML_FORMAT)
save_options.boundaries_template = "boundary--{#}"

# Save the message to .eml with custom boundaries
message.save("Custom_Boundary_Message.eml", save_options)

Aquí hay un ejemplo de la estructura del mensaje con límites personalizados guardados usando el código mostrado arriba:

From: sender@example.com  
To: recipient@example.com  
Subject: Custom_Boundary_Message  
Date: Fri, 27 Dec 2024 12:00:00 +0000
Content-Type: multipart/mixed;
 boundary="boundary--1"

This is a multi-part message in MIME format.

--boundary--1
Content-Type: multipart/alternative; boundary="boundary--2"


--boundary--2
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

Content-Type: text/plain; charset="us-ascii"

This is the plain text content of the email.


--boundary--2
Content-Type: text/html; charset="windows-1251"
Content-Transfer-Encoding: quoted-printable

<html>
  <body>
    <p>This is the <b>HTML</b> content of the email.</p>
  </body>
</html>

--boundary--2--

--boundary--1
Content-Type: application/octet-stream; name="report-2023-08.xlsx"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="report-2023-08.xlsx"

UEsDBBQABgAIAAAAIQBi7...

--boundary--1--

Conservando adjuntos TNEF en archivos EML

El siguiente fragmento de código muestra cómo guardar un archivo EML conservando los adjuntos TNEF.

from aspose.email import MailMessage, EmlSaveOptions, MailMessageSaveType, FileCompatibilityMode

mail_message = MailMessage.load(data_dir + "message.eml")

# Save as eml with preserved attachment
eml_save_options = EmlSaveOptions(MailMessageSaveType.eml_format)
eml_save_options.file_compatibility_mode = FileCompatibilityMode.PRESERVE_TNEF_ATTACHMENTS

mail_message.save(data_dir + "PreserveTNEFAttachment_out.eml", eml_save_options)

Guardando como MSG

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

from aspose.email import MailMessage, SaveOptions, MailMessageSaveType, FileCompatibilityMode

# Initialize and Load an existing EML file by specifying the MessageFormat
eml = MailMessage.load(data_dir + "message.eml")

# Save the Email message to disk in ASCII format and Unicode format
eml.save(data_dir + "AnEmail_out.msg", SaveOptions.default_msg_unicode)

Conservando fechas en archivos MSG

El MsgSaveOptions class le permite guardar el mensaje fuente como un archivo Outlook Message (MSG) conservando fechas. El siguiente fragmento de código muestra cómo guardar un archivo EML como MSG y conservar fechas.

from aspose.email import MailMessage, MsgSaveOptions, MailMessageSaveType, FileCompatibilityMode

# Initialize and Load an existing EML file by specifying the MessageFormat
eml = MailMessage.load(data_dir + "message.eml")

# Save as msg with preserved dates
msg_save_options = MsgSaveOptions(MailMessageSaveType.outlook_message_format_unicode)
msg_save_options.preserve_original_dates = True

eml.save(data_dir + "outTest_out.msg", msg_save_options)

Guardando 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.

from aspose.email import MailMessage, SaveOptions, MailMessageSaveType, FileCompatibilityMode

# Initialize and Load an existing EML file by specifying the MessageFormat
eml = MailMessage.load(data_dir + "message.eml")

eml.save(data_dir + "AnEmail_out.mhtml", SaveOptions.default_mhtml)

Configuraciones personalizadas de conversión a MHTML

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:

  • NONE - No se especifican configuraciones específicas.
  • WRITE_HEADER - Indica que la información del encabezado debe escribirse.
  • WRITE_OUTLINE_ATTACHMENTS - Indica que los adjuntos de esquema deben escribirse.
  • WRITE_COMPLETE_EMAIL_ADDRESS - Indica que la dirección de correo completa debe escribirse en todos los encabezados de correo.
  • NO_ENCODE_CHARACTERS - Indica que no se debe usar codificación de transferencia de caracteres.
  • HIDE_EXTRA_PRINT_HEADER - Indica que PageHeader será invisible.
  • WRITE_COMPLETE_TO_EMAIL_ADDRESS - Indica que la dirección de correo completa debe escribirse en el encabezado ‘To’.
  • WRITE_COMPLETE_FROM_EMAIL_ADDRESS - Indica que la dirección de correo completa debe escribirse en el encabezado ‘From’.
  • WRITE_COMPLETE_CC_EMAIL_ADDRESS - Indica que la dirección de correo completa debe escribirse en el encabezado ‘Cc’.
  • WRITE_COMPLETE_BCC_EMAIL_ADDRESS - Indica que la dirección de correo completa debe escribirse en el encabezado ‘Bcc’.
  • RENDER_CALENDAR_EVENT - Indica que el texto del evento del calendario debe escribirse en el mhtml de salida.
  • SKIP_BYTE_ORDER_MARK_IN_BODY - Indica que los bytes Byte Order Mark (BOM) deben escribirse en el cuerpo.
  • RENDER_V_CARD_INFO - Indica que el texto de VCard AlternativeView debe escribirse en el mhtml de salida.
  • DISPLAY_AS_OUTLOOK - Indica que el encabezado From se mostrará como en Outlook.
  • RENDER_TASK_FIELDS - Indica que los campos específicos de Task deben escribirse en el mhtml de salida.

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

from aspose.email import MailMessage, MhtSaveOptions, MhtFormatOptions, MailMessageSaveType, FileCompatibilityMode

# Load an existing EML file
eml = MailMessage.load(data_dir + "message.eml")

# Save as mht with header
mht_save_options = MhtSaveOptions()

# Specify formatting options required
# Here we are specifying to write header information to output without writing extra print header
# and the output headers should be displayed as the original headers in the message
mht_save_options.mht_format_options = MhtFormatOptions.WRITE_HEADER | MhtFormatOptions.HIDE_EXTRA_PRINT_HEADER | MhtFormatOptions.DISPLAY_AS_OUTLOOK

# Check the body encoding for validity.
mht_save_options.check_body_content_encoding = True

eml.save(data_dir + "outMessage_out.mht", mht_save_options)

Incluyendo eventos del Calendario en la conversión a MHTML

El MhtFormatOptions.RenderCalendarEvent renderiza los eventos del Calendario al MHTML de salida. El siguiente fragmento de código muestra cómo renderizar eventos del calendario al convertir a MHTML:

from aspose.email import MailMessage, MhtSaveOptions, MhtFormatOptions, MhtTemplateName, MailMessageSaveType, FileCompatibilityMode

file_name = "message.msg"

# Load the MSG file
msg = MailMessage.load(data_dir + file_name)

# Create MHT save options
options = MhtSaveOptions()
options.mht_format_options = MhtFormatOptions.WRITE_HEADER | MhtFormatOptions.RENDER_CALENDAR_EVENT

# Save the message as MHTML
msg.save(data_dir + "Meeting with Recurring Occurrences.mhtml", options)

Exportando correo a MHT sin imágenes incrustadas

from aspose.email import MailMessage, MhtSaveOptions, MhtFormatOptions, MhtTemplateName, MailMessageSaveType, FileCompatibilityMode

# Load the EML file
eml = MailMessage.load(data_dir + "message.eml")

# Create MHT save options
mht_save_options = MhtSaveOptions()
mht_save_options.skip_inline_images = True

# Save the message as MHTML without inline images
eml.save(data_dir + "EmlToMhtmlWithoutInlineImages_out.mht", mht_save_options)

Exportando correo a MHT con zona horaria personalizada

MailMessage class proporciona el TimeZoneOffset propiedad para establecer una zona horaria personalizada al exportar a MHT. El siguiente fragmento de código muestra cómo exportar un correo a MHT con zona horaria personalizada:

from aspose.email import MailMessage, MhtSaveOptions, MhtFormatOptions, MhtTemplateName, MailMessageSaveType, FileCompatibilityMode
from datetime import timedelta

# Load the EML file
eml = MailMessage.load(data_dir + "message.eml")

# Set the local time for message date
eml.time_zone_offset = timedelta(hours=-8)

# The dates will be rendered by the local system time zone
mht_save_options = MhtSaveOptions()
mht_save_options.mht_format_options = MhtFormatOptions.WRITE_HEADER
eml.save(data_dir + "ExportEmailToMHTWithCustomTimezone_out.mhtml", mht_save_options)

Guardando como HTML

El HtmlSaveOptions class le permite exportar el cuerpo del mensaje a HTML con la opción de guardar recursos incrustados. El siguiente fragmento de código muestra cómo guardar un mensaje como HTML donde el valor predeterminado de embed_resources es true.

from aspose.email import MailMessage, SaveOptions, HtmlSaveOptions, HtmlFormatOptions

# Load the EML file
message = MailMessage.load(data_dir + "message.eml")

# Save the Email message as HTML
message.save(data_dir + "SaveAsHTML_out.html", SaveOptions.default_html)

# OR

eml = MailMessage.load(data_dir + "message.eml")
options = HtmlSaveOptions()
options.embed_resources = False
options.html_format_options = (
    HtmlFormatOptions.WRITE_HEADER
    | HtmlFormatOptions.WRITE_COMPLETE_EMAIL_ADDRESS
)  # save the message headers to output HTML using the formatting options
eml.save(data_dir + "SaveAsHTML1_out.html", options)

Guardando como plantilla de Outlook (.OFT)

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

from aspose.email import MailMessage, SaveOptions

eml = MailMessage("test@from.to", "test@to.to", "template subject", "Template body")

oft_eml_file_name = "EmlAsOft_out.oft"
options = SaveOptions.default_msg_unicode
options.save_as_template = True
eml.save(data_dir + oft_eml_file_name, options)