Načítání, ukládání a konverze e‑mailů

Detekce formátů e‑mailových souborů

Aspose.Email API poskytuje možnost detekovat formát souboru poskytnuté zprávy. The DetectFileFormat metoda FileFormatUtil třída může být použita k dosažení tohoto. Následující třídy a metody lze použít k detekci načteného formátu souboru:

Následující úryvek kódu ukazuje, jak detekovat formáty souborů:

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

Načítání zprávy s možnostmi načtení

Následující úryvek kódu ukazuje, jak načíst zprávu s možnostmi načtení.

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)

Zachování vloženého formátu zprávy během načítání

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

Ukládání a konverze e‑mailů

Aspose.Email usnadňuje konverzi libovolného typu zprávy do jiného formátu. K demonstraci této funkce kód v tomto článku načte tři typy zpráv z disku a uloží je zpět v jiných formátech. Základní třída SaveOptions a třídy EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions může být použito pro další nastavení při ukládání zpráv do jiných formátů. Článek ukazuje, jak použít tyto třídy k uložení ukázkového e‑mailu jako:

  • EML formát.
  • Outlook MSG.
  • MHTML formát.
  • HTML formát.

Ukládání jako EML

Následující úryvek kódu ukazuje, jak načíst EML zprávu a uložit ji na disk ve stejném formátu.

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)

Zachování hranic v souborech EML

Následující úryvek kódu ukazuje, jak načíst soubor EML a uložit jej ve stejném formátu s zachováním původních hranic.

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)

Přizpůsobení řetězců MIME hranic

Aspose.Email pro .NET umožňuje nakonfigurovat šablonu hranic používanou v MIME zprávách. To je dosaženo prostřednictvím boundaries_template vlastnost třídy EmlSaveOptions třída.

Nastavením vlastního šablony můžete definovat, jak jsou generovány MIME hranice. Zástupný znak {#} v šabloně bude nahrazen inkrementálním číslem hranice, což umožní dynamické a čitelné řetězce hranic.

Pokud boundaries_template není nastaveno (výchozí je None), knihovna používá svůj interní formát hranic.

Následující ukázka kódu ukazuje, jak přizpůsobit řetězce MIME hranic při ukládání e‑mailové zprávy do formátu .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)

Zde je příklad struktury zprávy s vlastními hranicemi uloženými pomocí výše uvedeného kódu:

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

Zachování TNEF příloh v souborech EML

Následující úryvek kódu ukazuje, jak uložit soubor EML se zachováním TNEF příloh.

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)

Ukládání jako MSG

Následující úryvek kódu ukazuje, jak načíst EML zprávu a převést ji na MSG pomocí vhodné volby z 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)

Zachování dat v souborech MSG

The MsgSaveOptions třída umožňuje uložit zdrojovou zprávu jako soubor Outlook Message (MSG) se zachováním dat. Následující úryvek kódu ukazuje, jak uložit soubor EML jako MSG a zachovat data.

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)

Ukládání jako MHTML

Různé možnosti MHTML lze použít k dosažení požadovaných výsledků. Následující úryvek kódu vám ukáže, jak načíst zprávu EML do MailMessage a převést jej do 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)

Vlastní nastavení konverze MHTML

The MhtSaveOptions Třída poskytuje další možnosti pro ukládání e‑mailových zpráv do formátu MHTML. Enumerator MhtFormatOptions Umožňuje zapisovat další informace o e‑mailu do výstupního MHTML. Následující další pole lze zapsat:

  • NONE – nejsou specifikována žádná konkrétní nastavení.
  • WRITE_HEADER – označuje, že by měla být zapsána informace z hlavičky.
  • WRITE_OUTLINE_ATTACHMENTS – označuje, že by měly být zapsány outline přílohy.
  • WRITE_COMPLETE_EMAIL_ADDRESS – označuje, že kompletní e‑mailová adresa by měla být zapsána do všech e‑mailových hlaviček.
  • NO_ENCODE_CHARACTERS – označuje, že by se neměl používat žádný převodový kód znaků.
  • HIDE_EXTRA_PRINT_HEADER – označuje, že PageHeader bude neviditelný.
  • WRITE_COMPLETE_TO_EMAIL_ADDRESS – označuje, že kompletní e‑mailová adresa by měla být zapsána do hlavičky ‘To’.
  • WRITE_COMPLETE_FROM_EMAIL_ADDRESS – označuje, že kompletní e‑mailová adresa by měla být zapsána do hlavičky ‘From’.
  • WRITE_COMPLETE_CC_EMAIL_ADDRESS – označuje, že kompletní e‑mailová adresa by měla být zapsána do hlavičky ‘Cc’.
  • WRITE_COMPLETE_BCC_EMAIL_ADDRESS – označuje, že kompletní e‑mailová adresa by měla být zapsána do hlavičky ‘Bcc’.
  • RENDER_CALENDAR_EVENT – označuje, že text z události kalendáře by měl být zapsán do výstupního mhtml.
  • SKIP_BYTE_ORDER_MARK_IN_BODY – označuje, že bajty Byte Order Mark (BOM) by měly být zapsány do těla.
  • RENDER_V_CARD_INFO – označuje, že text z VCard AlternativeView by měl být zapsán do výstupního mhtml.
  • DISPLAY_AS_OUTLOOK – označuje, že hlavička From bude zobrazena jako v Outlooku.
  • RENDER_TASK_FIELDS – označuje, že konkrétní pole úkolu by měla být zapsána do výstupního mhtml.

Následující úryvek kódu ukazuje, jak převést soubor EML na MHTML s volitelnými nastaveními.

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)

Zahrnutí událostí kalendáře do konverze MHTML

The MhtFormatOptions.RenderCalendarEvent vykresluje události kalendáře do výstupního MHTML. Následující úryvek kódu ukazuje, jak vykreslit kalendářové události při konverzi do 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)

Export e‑mailu do MHT bez vložených obrázků

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)

Export e‑mailu do MHT s vlastní časovou zónou

MailMessage třída poskytuje TimeZoneOffset vlastnost pro nastavení vlastní časové zóny při exportu do MHT. Následující úryvek kódu ukazuje, jak exportovat e‑mail do MHT s vlastní časovou zónou:

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)

Ukládání jako HTML

The HtmlSaveOptions třída umožňuje exportovat tělo zprávy do HTML s možností uložit vložené zdroje. Následující úryvek kódu ukazuje, jak uložit zprávu jako HTML, kde výchozí hodnota embed_resources je 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)

Ukládání jako šablona Outlooku (.OFT)

Následující úryvek kódu ukazuje, jak uložit zprávu jako šablonu Outlooku (.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)