Введение

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

В связи с этим aspose-email-foss пакет предоставляет чистую библиотеку с лицензией MIT для чтения, создания и преобразования файлов Outlook MSG. Он раскрывает высокоуровневую программу Microsoft Office Access. MapiMessage API для общих задач наряду с низким уровнем MsgReader библиотека требует Python 3.10 или более поздней версии и не имеет нативных зависимостей.

Независимо от того, нужно ли вам извлечь строку и тело предмета из базы архивных сообщений, перечислить приложения для индексации или преобразовать файлы MSG в стандартный формат RFC 5322, эта библиотека обрабатывает бинарное анализаторство, чтобы вы могли сосредоточиться на логике вашего прибора.


Что входит в него?

Чтение файлов MSG с помощью MapiMessage

В связи с этим MapiMessage class - это первичная точка входа для анализа файлов 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 объекты, которые предоставляют имя файла, необработанные байты (raw bytes), тип MIME и дополнительный идентификатор контента для изображений в строке.

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

Преобразование МСГ в ЭМЛ

В связи с этим 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 использует встроенный Python. email Модуль для сериализации. Библиотека обрабатывает конверсию 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)")

Поддерживаемые форматы

Формат:РасширениеЧитайте .Написать .
Перспектива MSG.msgДа , я знаю .Да , я знаю .
Двойной файл соединения.cfbДа , я знаю .Да , я знаю .
EML (посредством преобразования).emlДа (посредством: from_email_message)Да (посредством: to_email_message)

Поддержка EML осуществляется путем преобразования: MapiMessage.from_email_message() импорт из Python email.message.EmailMessage объект, и to_email_message() Необходимость в прямом анализе файлов EML не предусмотрена стандартная библиотека обрабатывает формат wire-формата.


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

Aspose.Email FOSS for Python is released under the MIT license. You are free to use, modify, and distribute the library in both commercial and non-commercial projects. The full source code is available on GitHub.

Библиотека является чистой реализацией Python без компилируемых расширений или нативных зависимостей. Она работает на любой платформе, поддерживающей Python 3.10 и более поздние версии.


Начинать

Изучить больше ресурсов для работы с Aspose.Email FOSS для Python: