Hur man parsar MSG-filer i Python

Hur man parsar MSG-filer i Python

aspose-email-foss för Python tillhandahåller ett rent Python‑API för att läsa Outlook MSG‑filer utan beroenden på Microsoft Office. Ladda en fil i ett MapiMessage‑objekt för att komma åt all meddelandedata.

Steg-för-steg-guide

Steg 1: Installera paketet

pip install aspose-email-foss

Kräver Python 3.10 eller senare.


Steg 2: Importera MapiMessage‑klassen

from aspose.email_foss.msg import MapiMessage

Steg 3: Ladda en MSG-fil

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

För tolerant parsning av felaktiga filer, ange strict=False:

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

Steg 4: Åtkomst till meddelandeegenskaper

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

Steg 5: Lista bilagor

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

Steg 6: Inspektera låg‑nivå CFB‑struktur

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()

Vanliga problem och lösningar

CFBError vid inläsning

Filen är inte en giltig CFB-behållare. Verifiera att det är en faktisk Outlook MSG-fil, inte en EML.

Kroppen är tom men HTML‑kroppen har innehåll

Vissa meddelanden lagrar innehåll endast i HTML. Kontrollera msg.body_html när msg.body returnerar None.

Valideringsvarningar

Få åtkomst till msg.validation_issues för att se en tuple av efterlevnadsvarningar för den inlästa filen.


Vanliga frågor (FAQ)

Kan jag läsa EML-filer?

Inte direkt. Biblioteket hanterar MSG (CFB)-formatet. Konvertera EML-innehåll till ett EmailMessage-objekt först, och använd sedan MapiMessage.from_email_message().

Läser laddning all bifogad data till minnet?

Nej. Bilagans metadata läses på begäran. Använd iter_attachments_info() för lättviktig iteration.

Är den trådsäker?

Varje MapiMessage-instans är oberoende. Samtidiga läsningar från separata instanser är säkra.

 Svenska