Вступ

Програмний парсинг електронних листів є поширеною вимогою для міграції даних, архівних робочих процесів та інструментів забезпечення відповідності. Файли Outlook MSG використовують контейнерний формат Compound File Binary (CFB) з властивостями MAPI для кодування метаданих повідомлення, вмісту тіла, одержувачів та вкладень. Робота з цим форматом у Python традиційно вимагала або комерційних бібліотек, або низькорівневого бінарного маніпулювання.

Пакет aspose-email-foss надає чисту Python, ліцензовану під MIT бібліотеку для читання, створення та конвертації файлів Outlook MSG. Він пропонує високорівневий MapiMessage API для типових завдань разом із низькорівневим доступом MsgReader для детального огляду підложеної структури CFB. Бібліотека вимагає Python 3.10 або новішу версію та не має нативних залежностей.

Якщо вам потрібно витягти рядок теми та тіло з пакету архівованих повідомлень, перерахувати вкладення для індексації або конвертувати файли MSG у стандартний формат RFC 5322, ця бібліотека виконує бінарний парсинг, дозволяючи вам зосередитися на логіці вашого застосунку.


Що включено

Читання файлів MSG за допомогою MapiMessage

Клас MapiMessage є основною точкою входу для парсингу файлів Outlook MSG. Відкрийте файл, отримайте доступ до його властивостей та закрийте його акуратно за допомогою менеджера контексту.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("meeting-invite.msg") as message:
    print(f"Subject: {message.subject}")
    print(f"Body: {message.body[:200]}")
    print(f"HTML body available: {message.body_html is not None}")

Метод from_file читає контейнер CFB, розбирає потоки властивостей MAPI та заповнює типізовані атрибути. Властивості subject, body та body_html повертають декодовані рядки безпосередньо.

Видобування одержувачів

Кожен файл MSG зберігає інформацію про одержувачів у спеціальних сховищах MAPI. Властивість MapiMessage.recipients повертає список об’єктів MapiRecipient з типізованими полями для імені для відображення, електронної адреси та типу одержувача (TO, CC або BCC).

from aspose.email_foss import msg

with msg.MapiMessage.from_file("team-update.msg") as message:
    for recipient in message.recipients:
        print(
            f"{recipient.display_name} <{recipient.email_address}> "
            f"type={recipient.recipient_type}"
        )

Робота з вкладеннями

Метод iter_attachments_info повертає об’єкти MapiAttachment, які надають назву файлу, необроблені байти, тип MIME та необов’язковий Content-ID для вбудованих зображень.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("report.msg") as message:
    for att in message.iter_attachments_info():
        print(f"  {att.filename} ({att.mime_type}, {len(att.data)} bytes)")
        if att.content_id:
            print(f"    inline content-id: {att.content_id}")

Доступ до властивостей MAPI

Для сценаріїв, які вимагають конкретних значень властивостей MAPI, що виходять за межі зручних атрибутів, використовуйте get_property_value з константою PropertyId. Це забезпечує прямий доступ до будь-якої властивості, збереженої у файлі MSG.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("notification.msg") as message:
    sender = message.get_property_value(msg.PropertyId.SENDER_NAME)
    email = message.get_property_value(msg.PropertyId.SENDER_EMAIL_ADDRESS)
    delivery = message.get_property_value(msg.PropertyId.MESSAGE_DELIVERY_TIME)
    print(f"From: {sender} <{email}>")
    print(f"Delivered: {delivery}")

Ітерація всіх властивостей

Коли потрібно перевірити кожну властивість у повідомленні (для налагодження, аудиту чи міграції), метод iter_properties повертає об’єкти MapiProperty з повною інформацією про тег і значення.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("sample.msg") as message:
    for prop in message.iter_properties():
        print(
            f"tag=0x{prop.property_tag:08X} "
            f"type=0x{prop.property_type:04X} "
            f"value={prop.value!r}"
        )

Перетворення MSG у EML

Метод to_email_message перетворює розібраний MSG у стандартний Python email.message.EmailMessage об’єкт. Далі ви можете серіалізувати повідомлення у формат RFC 5322 (EML) за допомогою стандартної бібліотеки.

from aspose.email_foss import msg

with msg.MapiMessage.from_file("archive.msg") as message:
    email_message = message.to_email_message()
    eml_bytes = email_message.as_bytes()
    with open("archive.eml", "wb") as f:
        f.write(eml_bytes)

Зверніть увагу, що вихідний EML використовує вбудований модуль email Python для серіалізації. Бібліотека виконує конвертацію MSG-to-MAPI-to-EmailMessage; стандартна бібліотека обробляє формальний формат RFC 5322.


Швидкий старт

Встановіть пакет з PyPI і проаналізуйте ваш перший файл MSG за допомогою менш ніж 20 рядків:

# Install: pip install aspose-email-foss>=26.3
from aspose.email_foss import msg

# Create a new message
message = msg.MapiMessage.create(
    "Project status update",
    "Hello team,\n\nPlease review the attached report.\n\nRegards",
)
message.add_recipient("alice@example.com", display_name="Alice")
message.add_attachment("notes.txt", b"meeting notes\n", mime_type="text/plain")
message.save("status-update.msg")

# Read it back and extract data
with msg.MapiMessage.from_file("status-update.msg") as loaded:
    print(f"Subject: {loaded.subject}")
    print(f"Recipients: {len(loaded.recipients)}")
    for att in loaded.iter_attachments_info():
        print(f"Attachment: {att.filename} ({len(att.data)} bytes)")

Підтримувані формати

ФорматРозширенняЧитатиЗапис
Outlook MSG.msgТакТак
Compound File Binary.cfbТакТак
EML (через конвертацію).emlТак (через from_email_message)Так (через to_email_message)

Підтримка EML працює через конверсію: MapiMessage.from_email_message() імпортує з Python email.message.EmailMessage об’єкта, а to_email_message() експортує назад. Прямий аналіз файлів EML не передбачено — стандартна бібліотека обробляє формальний формат EML.


Відкритий код та ліцензування

Aspose.Email FOSS для Python випущено під ліцензією MIT. Ви вільні використовувати, змінювати та розповсюджувати бібліотеку в комерційних та некомерційних проектах. Повний вихідний код доступний на GitHub.

Бібліотека є чистою-Python реалізацією без скомпільованих розширень або нативних залежностей. Вона працює на будь-якій платформі, яка підтримує Python 3.10 або новішу.


Початок роботи

Ознайомтесь з додатковими ресурсами для роботи з Aspose.Email FOSS для Python:

  • Developer Guide — повна документація з підручниками та покроковими довідниками API
  • Knowledge Base — статті «як зробити» та часто ставлені питання
  • API Reference — повний довідник класів і методів

Пов’язані ресурси