Вспомогательные функции — MailMessage

MailMessage с вложениями TNEF

Transport Neutral Encapsulation Format (TNEF) — это проприетарный формат вложений электронной почты, используемый Microsoft Outlook и Microsoft Exchange Server. API Aspose.Email позволяет читать сообщения электронной почты с вложениями TNEF и изменять содержимое вложения. Затем письмо можно сохранить как обычное письмо или в том же формате, сохранив вложения TNEF. В этой статье представлены различные примеры кода для работы с сообщениями, содержащими вложения TNEF. Также показано, как создавать файлы TNEF EML из файлов Outlook MSG.

Чтение сообщения с сохранением TNEF‑вложений

Ниже показан фрагмент кода, демонстрирующий чтение сообщения с сохранением TNEF‑вложений.

from aspose.email import MailMessage, SaveOptions, EmlLoadOptions, MessageFormat, FileCompatibilityMode

options = EmlLoadOptions()
# This will Preserve the TNEF attachment as it is, file contains the TNEF attachment
options.preserve_tnef_attachments = True

eml = MailMessage.load(data_dir + "message.eml", options)
for attachment in eml.attachments:
    print(attachment.name)

Создание TNEF‑EML из MSG

Файлы Outlook MSG иногда содержат информацию, такую как таблицы и стили текста, которые могут искажаться при конвертации в EML. Создание TNEF‑сообщений из таких файлов MSG позволяет сохранять форматирование и даже отправлять такие сообщения через почтовые клиенты, сохраняя форматирование. Для этого используется свойство convert_as_tnef. Ниже показан фрагмент кода, демонстрирующий создание TNEF‑EML из MSG.

from aspose.email.mapi import MapiMessage, MailConversionOptions, OutlookMessageFormat

mapi_msg = MapiMessage.from_file(data_dir + "message.msg")

mail_conversion_options = MailConversionOptions()
mail_conversion_options.convert_as_tnef = True

message = mapi_msg.to_mail_message(mail_conversion_options)

Для создания TNEF можно использовать следующий пример кода.

from aspose.email import MailMessage, SaveOptions, MsgLoadOptions, MessageFormat, FileCompatibilityMode

options = MsgLoadOptions()
# The PreserveTnefAttachments option with MessageFormat.Msg will create the TNEF eml.
options.preserve_tnef_attachments = True

eml = MailMessage.load(eml_file_name, options)

Определить, является ли сообщение TNEF

Ниже показан фрагмент кода, демонстрирующий определение, является ли сообщение TNEF.

from aspose.email import MailMessage

mail = MailMessage.load(data_dir + "message.eml")
is_tnef = mail.original_is_tnef

Обработка недоставленных сообщений

Очень часто сообщение, отправленное получателю, может отскочить по любой причине, например из‑за неверного адреса. API Aspose.Email позволяет обрабатывать такие сообщения, проверяя, являются ли они недоставленными или обычными письмами. Метод check_bounced класса MailMessage возвращает положительный результат, если сообщение является bounce‑письмом. Эта статья демонстрирует использование BounceResult Класс, который позволяет проверять, является ли сообщение недоставленным (bounce). Он также предоставляет подробную информацию о получателях, выполненном действии и причине уведомления. Ниже показан фрагмент кода, демонстрирующий обработку недоставленных сообщений.

from aspose.email import MailMessage, SaveOptions, MsgLoadOptions, MessageFormat, FileCompatibilityMode

mail = MailMessage.load(data_dir + "message.eml")
result = mail.check_bounced()

print("IsBounced: " + str(result.is_bounced))
print("Action: " + str(result.action))
print("Recipient: " + str(result.recipient))
print()
print("Reason: " + str(result.reason))
print("Status: " + str(result.status))
print()

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

Aspose.Email предоставляет фильтрацию электронной почты с использованием байесовского анализатора спама. Он предоставляет SpamAnalyzer Класс для этой цели. Эта статья показывает, как обучить фильтр различать спам и обычные письма на основе словарной базы.

from aspose.email import MailMessage, SaveOptions, MsgLoadOptions, MessageFormat, FileCompatibilityMode
from aspose.email.antispam import SpamAnalyzer
import os

ham_folder = "/hamFolder"
spam_folder = "/Spam"
test_folder = data_dir
database_file = "SpamFilterDatabase.txt"

def print_result(probability):
    if probability >= 0.5:
        print("The message is classified as spam.")
    else:
        print("The message is classified as not spam.")
    print("Spam Probability: " + str(probability))
    print()

def teach_and_create_database(ham_folder, spam_folder, database_file):
    analyzer = SpamAnalyzer(database_file)
    analyzer.teach_from_directory(ham_folder, True)
    analyzer.teach_from_directory(spam_folder, False)
    analyzer.save_database()

teach_and_create_database(ham_folder, spam_folder, database_file)

test_files = [f for f in os.listdir(test_folder) if f.endswith(".eml")]
analyzer = SpamAnalyzer(database_file)

for file in test_files:
    file_path = os.path.join(test_folder, file)
    msg = MailMessage.load(file_path)
    print(msg.subject)
    probability = analyzer.test(msg)
    print_result(probability)