Как да парсирам 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 инстанция е независима. Паралелните четения от отделни инстанции са безопасни.