Как да парсирам 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 body има съдържание

Някои съобщения съхраняват съдържанието само в HTML. Проверете msg.body_html, когато msg.body връща None.

Предупреждения за валидиране

Достъпете msg.validation_issues, за да видите кортеж от предупреждения за съответствие за заредения файл.


Често задавани въпроси (FAQ)

Мога ли да чета EML файлове?

Не директно. Библиотеката обработва формат MSG (CFB). Конвертирайте съдържанието на EML в обект EmailMessage първо, след това използвайте MapiMessage.from_email_message().

Дали зареждането чете всички данни от прикачения файл в паметта?

Не. Метаданните на прикачения файл се четат при поискване. Използвайте iter_attachments_info() за лека итерация.

Безопасно ли е за нишки?

Всяка MapiMessage инстанция е независима. Паралелните четения от отделни инстанции са безопасни.

 Български