Зареждане, запазване и конвертиране на имейли

Откриване на формати на имейл файлове

Aspose.Email API предоставя възможност за откриване на формата на предоставения файл с съобщение. The DetectFileFormat метод на FileFormatUtil Класът може да се използва за постигане на това. Следните класове и методи могат да се използват за откриване на формата на заредения файл:

Следният фрагмент от код показва как да откриете файлови формати:

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

Зареждане на съобщение с опции за зареждане

Следният фрагмент от код показва как да заредите съобщение с опции за зареждане.

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)

Запазване на формата на вградени съобщения по време на зареждане

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

Запазване и конвертиране на имейли

Aspose.Email улеснява конвертирането на всеки тип съобщение в друг формат. За да демонстрира тази функция, кодът в тази статия зарежда три вида съобщения от диск и ги запазва обратно в други формати. Базовият клас SaveOptions и класовете EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions могат да се използват за допълнителни настройки при запазване на съобщения в други формати. Статията показва как да се използват тези класове за запазване на примерен имейл като:

  • EML формат.
  • Outlook MSG.
  • MHTML формат.
  • HTML формат.

Запазване като EML

Следният фрагмент от код показва как да заредите EML съобщение и да го запазите на диска в същия формат.

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)

Запазване на граници в EML файлове

Следният фрагмент от код показва как да заредите EML файл и да го запазите в същия формат, запазвайки оригиналните граници.

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)

Персонализиране на MIME граници

Aspose.Email за .NET позволява да конфигурирате шаблона за граници, използван в MIME съобщения. Това се постига чрез boundaries_template свойство на EmlSaveOptions клас.

Като зададете персонализиран шаблон, можете да определите как се генерират MIME границите. Заместващият символ {#} в шаблона ще бъде заменен с инкрементален номер на граница, позволявайки динамични и четливи низове за граници.

Ако boundaries_template не е зададено (по подразбиране е None), библиотеката използва вътрешния си формат за граници.

Следният примерен код показва как да персонализирате MIME границите при запазване на имейл съобщение във формат .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)

Тук е пример за структурата на съобщението с персонализирани граници, запазени с използване на кода, показан по-горе:

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

Запазване на TNEF прикачени файлове в EML файлове

Следният фрагмент от код показва как да запазите EML файл, запазвайки 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)

Запазване като MSG

Следният фрагмент от код показва как да заредите EML съобщение и да го конвертирате в MSG, използвайки съответната опция от 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)

Запазване на датите в MSG файлове

Този MsgSaveOptions class позволява да запазите изходното съобщение като Outlook Message файл (MSG), запазвайки датите. Следният фрагмент от код показва как да запазите EML файл като MSG и да запазите датите.

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)

Запазване като MHTML

Различни опции на MHTML могат да се използват за постигане на желаните резултати. Следният примерен код показва как да заредите EML съобщение в MailMessage и да я конвертирате в 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)

Персонализирани настройки за конверсия към MHTML

Този MhtSaveOptions клас предоставя допълнителни опции за запазване на имейл съобщения във формат MHTML. Перечисление MhtFormatOptions прави възможно записването на допълнителна имейл информация във изходен MHTML. Следните допълнителни полета могат да бъдат записани:

  • NONE - Не са зададени специфични настройки.
  • WRITE_HEADER - Означава, че информацията от заглавието трябва да бъде записана.
  • WRITE_OUTLINE_ATTACHMENTS - Означава, че outline прикачените файлове трябва да бъдат записани.
  • WRITE_COMPLETE_EMAIL_ADDRESS - Означава, че пълният имейл адрес трябва да бъде записан във всички заглавия на имейл.
  • NO_ENCODE_CHARACTERS - Означава, че не трябва да се използва кодиране при трансфер на символите.
  • HIDE_EXTRA_PRINT_HEADER - Означава, че PageHeader ще бъде невидим.
  • WRITE_COMPLETE_TO_EMAIL_ADDRESS - Означава, че пълният имейл адрес трябва да бъде записан в заглавието ‘To’.
  • WRITE_COMPLETE_FROM_EMAIL_ADDRESS - Означава, че пълният имейл адрес трябва да бъде записан в заглавието ‘From’.
  • WRITE_COMPLETE_CC_EMAIL_ADDRESS - Означава, че пълният имейл адрес трябва да бъде записан в заглавието ‘Cc’.
  • WRITE_COMPLETE_BCC_EMAIL_ADDRESS - Означава, че пълният имейл адрес трябва да бъде записан в заглавието ‘Bcc’.
  • RENDER_CALENDAR_EVENT - Означава, че текстът от календарното събитие трябва да бъде записан в изходния mhtml.
  • SKIP_BYTE_ORDER_MARK_IN_BODY - Означава, че байтовете на Byte Order Mark (BOM) трябва да бъдат записани в тялото.
  • RENDER_V_CARD_INFO - Означава, че текстът от VCard AlternativeView трябва да бъде записан в изходния mhtml.
  • DISPLAY_AS_OUTLOOK - Означава, че заглавието From ще се показва както в Outlook.
  • RENDER_TASK_FIELDS - Означава, че специфичните полета на Task трябва да бъдат записани в изходния mhtml.

Следният фрагмент от код показва как да конвертирате EML файл към MHTML с допълнителни настройки.

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)

Включване на календарни събития в конверсията към MHTML

Този MhtFormatOptions.RenderCalendarEvent извежда календарните събития в изходния MHTML. Следният фрагмент от код показва как да рендерирате календарни събития при конвертиране към 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)

Експортиране на имейл към MHT без вградени изображения

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)

Експортиране на имейл към MHT с персонализиран часови пояс

MailMessage клас предоставя TimeZoneOffset свойство за задаване на персонализиран часови пояс при експортиране към MHT. Следният фрагмент от код показва как да експортирате имейл към MHT с персонализиран часови пояс:

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)

Запазване като HTML

Този HtmlSaveOptions class позволява да експортирате тялото на съобщението към HTML с опция за запазване на вградените ресурси. Следният фрагмент от код показва как да запазите съобщение като HTML, където стойността по подразбиране за embed_resources е 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)

Запазване като Outlook шаблон (.OFT)

Следният фрагмент от код показва как да запазите съобщение като 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)