Comment analyser les fichiers MSG en Python

Comment analyser les fichiers MSG en Python

aspose-email-foss pour Python fournit une API pure-Python permettant de lire les fichiers Outlook MSG sans dépendances Microsoft Office. Chargez un fichier dans un objet MapiMessage pour accéder à toutes les données du message.

Guide étape par étape

Étape 1 : Installer le package

pip install aspose-email-foss

Nécessite Python 3.10 ou version ultérieure.


Étape 2 : Importer la classe MapiMessage

from aspose.email_foss.msg import MapiMessage

Étape 3 : Charger un fichier MSG

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

Pour une analyse tolérante des fichiers malformés, passez strict=False:

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

Étape 4 : Accéder aux propriétés du message

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

Étape 5 : Lister les pièces jointes

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

Étape 6 : Inspecter la structure CFB de bas niveau

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

Problèmes courants et solutions

CFBError lors du chargement

Le fichier n’est pas un conteneur CFB valide. Vérifiez qu’il s’agit bien d’un fichier Outlook MSG réel, et non d’un EML.

Le corps est vide mais le corps HTML contient du contenu

Certains messages stockent le contenu uniquement en HTML. Vérifiez msg.body_html lorsque msg.body renvoie None.

Avertissements de validation

Accédez msg.validation_issues pour voir un tuple d’avertissements de conformité pour le fichier chargé.


Foire aux questions (FAQ)

Puis-je lire les fichiers EML ?

Pas directement. La bibliothèque gère le format MSG (CFB). Convertissez le contenu EML en un objet EmailMessage d’abord, puis utilisez MapiMessage.from_email_message().

Le chargement lit-il toutes les données de la pièce jointe en mémoire ?

Non. Les métadonnées de la pièce jointe sont lues à la demande. Utilisez iter_attachments_info() pour une itération légère.

Est‑il thread‑safe ?

Chaque instance MapiMessage est indépendante. Les lectures concurrentes à partir d’instances distinctes sont sûres.

 Français