Як розбирати файли MSG у Python

Як розбирати файли MSG у Python

aspose-email-foss для Python надає чисто‑Python API для читання файлів Outlook MSG без залежностей від Microsoft Office. Завантажте файл у об’єкт MapiMessage, щоб отримати доступ до всіх даних повідомлення.

Покроковий посібник

Крок 1: Встановити пакет

pip install aspose-email-foss

Потрібен Python 3.10 або новіший.


Крок 2: Імпорт класу MapiMessage

from aspose.email_foss.msg import MapiMessage

Крок 3: Завантажити файл MSG

msg = MapiMessage.from_file("message.msg")

Для м’якого розбору пошкоджених файлів передайте strict=False:

msg = MapiMessage.from_file("message.msg", strict=False)

Крок 4: Доступ до властивостей повідомлення

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

Крок 5: Список вкладень

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

Крок 6: Перевірка низькорівневої структури CFB

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

Поширені проблеми та виправлення

CFBError при завантаженні

Файл не є дійсним контейнером CFB. Переконайтеся, що це справжній файл Outlook MSG, а не EML.

Тіло порожнє, але HTML‑тіло має вміст

Деякі повідомлення зберігають вміст лише в HTML. Перевірте msg.body_html, коли msg.body повертає None.

Попередження про валідацію

Отримайте доступ msg.validation_issues, щоб переглянути кортеж попереджень про відповідність для завантаженого файлу.


Часті запитання (FAQ)

Чи можу я читати файли EML?

Не безпосередньо. Бібліотека працює з форматом MSG (CFB). Спочатку конвертуйте вміст EML у об’єкт EmailMessage, потім використайте MapiMessage.from_email_message().

Чи завантаження читає всі дані вкладення у пам’ять?

Ні. Метадані вкладень читаються за потребою. Використовуйте iter_attachments_info() для легковагової ітерації.

Чи є це потокобезпечним?

Кожен екземпляр MapiMessage є незалежним. Паралельне читання з різних екземплярів безпечне.

 Українська