Утиліти - 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 повертає дійсний результат, якщо лист є повернутим. У цій статті показано використання BounceResult клас, який забезпечує можливість перевірки, чи є повідомлення повернутим (bounced) листом. Він також надає детальну інформацію про одержувачів, виконану дію та причину сповіщення. Нижче наведено фрагмент коду, який показує, як обробляти повернені повідомлення.

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)