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-fossNé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.