Chargement, enregistrement et conversion d’e‑mails

Détection des formats de fichiers e‑mail

L’API Aspose.Email fournit la capacité de détecter le format de fichier du message fourni. Le DetectFileFormat méthode de FileFormatUtil Cette classe peut être utilisée pour cela. Les classes et méthodes suivantes peuvent être utilisées pour détecter le format du fichier chargé :

L’extrait de code suivant montre comment détecter les formats de fichier :

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))

Chargement d’un message avec des options de chargement

L’extrait de code suivant montre comment charger un message avec des options de chargement.

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)

Conservation du format du message intégré lors du chargement

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))

Enregistrement et conversion d’e‑mails

Aspose.Email facilite la conversion de tout type de message vers un autre format. Pour démontrer cette fonctionnalité, le code de cet article charge trois types de messages depuis le disque et les enregistre de nouveau dans d’autres formats. La classe de base SaveOptions et les classes EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions peut être utilisé pour des paramètres supplémentaires lors de l’enregistrement de messages dans d’autres formats. L’article montre comment utiliser ces classes pour enregistrer un e‑mail d’exemple en tant que :

  • format EML.
  • Outlook MSG.
  • format MHTML.
  • format HTML.

Enregistrement en EML

L’extrait de code suivant montre comment charger un message EML et l’enregistrer sur le disque dans le même format.

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)

Préserver les frontières dans les fichiers EML

L’extrait de code suivant montre comment charger un fichier EML et le sauvegarder dans le même format en préservant les frontières d’origine.

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)

Personnaliser les chaînes de frontière MIME

Aspose.Email pour .NET vous permet de configurer le modèle de frontière utilisé dans les messages MIME. Cela se fait via le boundaries_template propriété du EmlSaveOptions classe.

En définissant un modèle personnalisé, vous pouvez définir comment les frontières MIME sont générées. Le caractère générique {#} dans le modèle sera remplacé par un numéro de frontière incrémental, permettant des chaînes de frontière dynamiques et lisibles.

Si boundaries_template n’est pas défini (la valeur par défaut est None), la bibliothèque utilise son format de frontière interne.

L’exemple de code suivant montre comment personnaliser les chaînes de frontière MIME lors de l’enregistrement d’un message e‑mail au format .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)

Voici un exemple de la structure du message avec des limites personnalisées enregistrées en utilisant le code ci‑dessus :

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

Préserver les pièces jointes TNEF dans les fichiers EML

L’extrait de code suivant montre comment enregistrer un fichier EML en préservant les pièces jointes 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)

Enregistrement en MSG

L’extrait de code suivant montre comment charger un message EML et le convertir en MSG en utilisant l’option appropriée depuis 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)

Préserver les dates dans les fichiers MSG

Le MsgSaveOptions classe vous permet d’enregistrer le message source en tant que fichier Outlook Message (MSG) en préservant les dates. L’extrait de code suivant montre comment enregistrer un fichier EML en MSG et conserver les dates.

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)

Enregistrement en MHTML

Différentes options de MHTML peuvent être utilisées pour obtenir les résultats souhaités. L’extrait de code suivant vous montre comment charger un message EML dans MailMessage et le convertir en 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)

Paramètres personnalisés de conversion MHTML

Le MhtSaveOptions la classe fournit des options supplémentaires pour enregistrer des messages e‑mail au format MHTML. L’énumérateur MhtFormatOptions rend possible l’écriture d’informations e‑mail supplémentaires dans le MHTML de sortie. Les champs supplémentaires suivants peuvent être écrits :

  • NONE - Aucun paramètre spécifique n’est spécifié.
  • WRITE_HEADER - Indique que les informations d’en‑tête doivent être écrites.
  • WRITE_OUTLINE_ATTACHMENTS - Indique que les pièces jointes de contour doivent être écrites.
  • WRITE_COMPLETE_EMAIL_ADDRESS - Indique que l’adresse e‑mail complète doit être écrite dans tous les en‑têtes d’e‑mail.
  • NO_ENCODE_CHARACTERS - Indique qu’aucun encodage de transfert des caractères ne doit être utilisé.
  • HIDE_EXTRA_PRINT_HEADER - Indique que PageHeader sera invisible.
  • WRITE_COMPLETE_TO_EMAIL_ADDRESS - Indique que l’adresse e‑mail complète doit être écrite dans l’en‑tête ‘To’.
  • WRITE_COMPLETE_FROM_EMAIL_ADDRESS - Indique que l’adresse e‑mail complète doit être écrite dans l’en‑tête ‘From’.
  • WRITE_COMPLETE_CC_EMAIL_ADDRESS - Indique que l’adresse e‑mail complète doit être écrite dans l’en‑tête ‘Cc’.
  • WRITE_COMPLETE_BCC_EMAIL_ADDRESS - Indique que l’adresse e‑mail complète doit être écrite dans l’en‑tête ‘Bcc’.
  • RENDER_CALENDAR_EVENT - Indique que le texte provenant de l’événement du calendrier doit être écrit dans le mhtml de sortie.
  • SKIP_BYTE_ORDER_MARK_IN_BODY - Indique que les octets Byte Order Mark (BOM) doivent être écrits dans le corps.
  • RENDER_V_CARD_INFO - Indique que le texte provenant de VCard AlternativeView doit être écrit dans le mhtml de sortie.
  • DISPLAY_AS_OUTLOOK - Indique que l’en‑tête From sera affiché comme dans Outlook.
  • RENDER_TASK_FIELDS - Indique que les champs de tâche spécifiques doivent être écrits dans le mhtml de sortie.

L’extrait de code suivant montre comment convertir un fichier EML en MHTML avec des paramètres optionnels.

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)

Inclusion des événements du calendrier dans la conversion MHTML

Le MhtFormatOptions.RenderCalendarEvent rendu les événements du calendrier vers la sortie MHTML. L’extrait de code suivant montre comment rendre les événements du calendrier lors de la conversion en 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)

Exportation d’un e‑mail vers MHT sans images intégrées

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)

Exportation d’un e‑mail vers MHT avec fuseau horaire personnalisé

MailMessage classe fournit le TimeZoneOffset propriété pour définir un fuseau horaire personnalisé lors de l’exportation vers MHT. L’extrait de code suivant montre comment exporter un e‑mail vers MHT avec un fuseau horaire personnalisé :

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)

Enregistrement en HTML

Le HtmlSaveOptions classe vous permet d’exporter le corps du message en HTML avec l’option d’enregistrer les ressources intégrées. L’extrait de code suivant montre comment enregistrer un message en HTML où la valeur par défaut de embed_resources est 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)

Enregistrement en tant que modèle Outlook (.OFT)

L’extrait de code suivant montre comment enregistrer un message en tant que modèle 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)