Com analitzar fitxers MSG amb Python

Com analitzar fitxers MSG amb Python

aspose-email-foss per a Python proporciona una API pure-Python per llegir fitxers Outlook MSG sense dependències de Microsoft Office. Carregueu un fitxer en un objecte MapiMessage per accedir a totes les dades del missatge.

Guia pas a pas

Pas 1: Instal·la el paquet

pip install aspose-email-foss

Requereix Python 3.10 o posterior.


Pas 2: Importa la classe MapiMessage

from aspose.email_foss.msg import MapiMessage

Pas 3: Carrega un fitxer MSG

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

Per a l’anàlisi tolerant de fitxers mal formats, passeu strict=False:

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

Pas 4: Accedir a les propietats del missatge

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

Pas 5: Llista d’adjunts

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

Pas 6: Inspecciona l’estructura CFB de baix nivell

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

Problemes comuns i solucions

CFBError quan es carrega

El fitxer no és un contenidor CFB vàlid. Verifiqueu que sigui un fitxer MSG d’Outlook real, no un EML.

El cos està buit però el cos HTML té contingut

Alguns missatges emmagatzemen el contingut només en HTML. Comproveu msg.body_html quan msg.body torni None.

Advertències de validació

Accedeix msg.validation_issues per veure una tupla d’avisos de compliment del fitxer carregat.


Preguntes freqüents (FAQ)

Puc llegir fitxers EML?

No directament. La biblioteca gestiona el format MSG (CFB). Converteix el contingut EML a un objecte EmailMessage primer, després utilitza MapiMessage.from_email_message().

La càrrega llegeix totes les dades de l’adjunt a la memòria?

No. Les metadades de l’adjunt es llegeixen a demanda. Utilitzeu iter_attachments_info() per a una iteració lleugera.

És thread-safe?

Cada instància MapiMessage és independent. Les lectures simultànies des de diferents instàncies són segures.

 Català