Jak parsovat soubory MSG v Pythonu

Jak parsovat soubory MSG v Pythonu

aspose-email-foss for Python poskytuje čistě‑Python API pro čtení souborů Outlook MSG bez závislostí na Microsoft Office. Načtěte soubor do objektu MapiMessage, abyste získali přístup ke všem datům zprávy.

Průvodce krok za krokem

Krok 1: Nainstalujte balíček

pip install aspose-email-foss

Vyžaduje Python 3.10 nebo novější.


Krok 2: Importujte třídu MapiMessage

from aspose.email_foss.msg import MapiMessage

Krok 3: Načíst soubor MSG

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

Pro shovívavé parsování poškozených souborů předávejte strict=False:

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

Krok 4: Přístup k vlastnostem zprávy

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

Krok 5: Seznam příloh

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

Krok 6: Prozkoumat nízkoúrovňovou strukturu 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()

Časté problémy a opravy

CFBError při načítání

Soubor není platný kontejner CFB. Ověřte, že se jedná o skutečný soubor Outlook MSG, nikoli EML.

Tělo je prázdné, ale HTML tělo má obsah

Některé zprávy ukládají obsah pouze v HTML. Zkontrolujte msg.body_html, když msg.body vrací None.

Varování při validaci

Přístup msg.validation_issues zobrazí n‑tici varování o souladu pro načtený soubor.


Často kladené otázky (FAQ)

Mohu číst soubory EML?

Ne přímo. Knihovna pracuje s formátem MSG (CFB). Nejprve převeďte obsah EML na objekt EmailMessage, poté použijte MapiMessage.from_email_message().

Načítání načte všechna data přílohy do paměti?

Ne. Metadata přílohy se načítají na vyžádání. Použijte iter_attachments_info() pro lehkou iteraci.

Je to bezpečné pro vlákna?

Každá instance MapiMessage je nezávislá. Současné čtení z různých instancí je bezpečné.

 Čeština