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-fossKräver Python 3.10 eller senare.
Steg 2: Importera MapiMessage‑klassen
from aspose.email_foss.msg import MapiMessageSteg 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.