Утилиты - MailMessage

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

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

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

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

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

options = EmlLoadOptions()
# Это сохранит вложение TNEF как есть, файл содержит вложение TNEF
options.preserve_tnef_attachments = True

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

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

MSG-файлы Outlook иногда содержат информацию, такую как таблицы и текстовые стили, которые могут быть нарушены при конвертации в 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()
# Опция PreserveTnefAttachments с MessageFormat.Msg создаст 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 возвращает действительный результат, если электронное сообщение является возвращенной электронной почтой. В этой статье показано использование класса BounceResult, который предоставляет возможность проверки, является ли сообщение возвращенным. Он также предоставляет подробную информацию о получателях, принятых мерах и причинах уведомления. Следующий фрагмент кода показывает, как обрабатывать возвращаемые сообщения.

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("Сообщение классифицируется как спам.")
    else:
        print("Сообщение классифицируется как не спам.")
    print("Вероятность спама: " + 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)