Fichiers de stockage Mbox

L’objectif principal de cet article est de vous aider à vous plonger dans le format mbox et de vous proposer des morceaux de code qui peuvent vous aider dans le processus de lecture des fichiers mbox. Vous apprendrez comment analyser les fichiers mbox, ainsi que comment accéder, afficher et stocker les messages qu’ils contiennent.

À propos du format Mbox

Le format mbox revêt une importance en raison de sa longue histoire et de sa large acceptation en tant que format standardisé pour le stockage des messages électroniques. Il s’agit d’un format de fichier en texte brut qui permet de concaténer plusieurs e-mails et de les stocker dans un seul fichier. La simplicité et la compatibilité de ce format avec divers clients et systèmes de messagerie en font un choix populaire pour l’archivage et le transfert de données de messagerie. De plus, le format mbox conserve les métadonnées essentielles telles que l’expéditeur, le destinataire, l’objet et l’horodatage, garantissant ainsi la préservation de l’intégrité des messages.

Les clients de messagerie les plus populaires compatibles avec ce format sont :

  • Thunderbird - un client de messagerie open source largement utilisé qui utilise le format mbox pour stocker les messages électroniques. Il stocke tous les messages d’un dossier dans un seul fichier avec l’extension “.mbox”. Pour la commodité de l’utilisateur et une gestion facile, des fichiers séparés sont créés pour chaque dossier dans la boîte aux lettres. Il permet aux utilisateurs d’importer et d’exporter des fichiers mbox de manière transparente, ce qui facilite la migration des données de messagerie entre Thunderbird et d’autres applications compatibles mbox.

  • Apple Mail - le client de messagerie par défaut sur les appareils macOS et iOS, offrant une prise en charge intégrée du format mbox. Il permet aux utilisateurs d’accéder, d’importer ou de transférer facilement des fichiers mbox dans Apple Mail en stockant chaque dossier de boîte aux lettres dans un fichier séparé. Les fichiers Apple Mail sont généralement stockés avec les extensions “.mbox” ou “.mbox.plist”.

  • Evolution - une application de gestion des e-mails et des informations personnelles riche en fonctionnalités pour Linux, prend également en charge le format mbox. Il permet aux utilisateurs d’importer des fichiers mbox, permettant une intégration fluide des données de messagerie dans la plate-forme complète d’Evolution.

Ce ne sont là que quelques exemples de clients de messagerie utilisant le format mbox. Comprendre le format et son utilisation dans différents clients de messagerie est essentiel lorsque vous travaillez avec de tels fichiers par programmation, car cela permet d’assurer la compatibilité et l’analyse précise des données de messagerie.

Il existe différentes variantes du format, chacune avec ses propres détails de mise en œuvre. Certains des formats mbox couramment rencontrés incluent mboxrd, mboxo, mboxcl, mboxcl2. Ces variations diffèrent principalement dans la manière dont elles traitent certains aspects tels que les délimiteurs de message et les métadonnées. Il est important d’être conscient de ces différences lorsque vous travaillez avec des fichiers mbox, car elles peuvent affecter la compatibilité et l’analyse des données de messagerie.

API Python pour lire les fichiers Mbox

Travailler avec des fichiers mbox en Python est facile avec notre bibliothèque Aspose.Email for Python. Cette API robuste et riche en fonctionnalités offre un ensemble complet de fonctionnalités pour le traitement des e-mails, telles que la possibilité de lire les fichiers mbox, d’extraire les messages et de manipuler les données des e-mails.

Il est important de mentionner que Aspose.Email for Python offre également une prise en charge complète de divers formats de mbox, y compris ceux mentionnés précédemment. Cela signifie que vous pouvez travailler de manière transparente avec ces fichiers à partir de différents clients de messagerie, quels que soient les détails de mise en œuvre spécifiques du format mbox. Pour tirer parti de la puissance de l’API, il est possible de télécharger sa DLL ou de l’installer à partir de PyPI à l’aide de la commande suivante :

> pip install Aspose.Email-for-Python-via-NET

Ouvrir le fichier Mbox

Pour commencer à travailler avec un fichier au format mbox, nous devons d’abord l’ouvrir. La bibliothèque Aspose.Email nous y aidera.

Dans notre code, nous allons suivre les étapes décrites ci-dessous :

  • Le code commence par importer les modules requis depuis la bibliothèque Aspose.Email : les classes MboxStorageReader et MboxLoadOptions.

  • Ensuite, nous créons une instance de MboxLoadOptions pour spécifier les options souhaitées pour le chargement du fichier.

  • Ensuite, nous définissons leaveopen sur False, indiquant que le fichier doit être fermé après la lecture, et spécifions UTF8 comme encodage de texte préféré.

  • Enfin, nous créons une instance de la classe MboxStorageReader en appelant la méthode statique createreader, en transmettant le nom du fichier source et l’instance MboxLoadOptions.

L’extrait de code suivant montre comment ouvrir un fichier mbox :

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

mbox_reader = MboxStorageReader.create_reader(file_name, mbox_load_options)

Lister les messages du fichier Mbox

Depuis que le fichier a été ouvert, nous pouvons explorer les messages qui y sont stockés. Les extraits de code ci-dessous représentent deux approches pour répertorier les messages d’un fichier mbox.

Approche 1 : méthode EnumerateMessageInfo

La première approche pour répertorier les messages d’un fichier mbox consiste à utiliser la méthode enumeratemessageinfo de la classe MboxStorageReader. Il parcourt les messages et affiche les informations de base du message telles que l’objet, les champs de, à et la date. Il renvoie également un identifiant de message (ID d’entrée) qui est utilisé ultérieurement pour lire le contenu complet du message. Cette approche a les caractéristiques suivantes :

  • Performance : elle est plus rapide par rapport à une autre approche en raison de l’accent mis sur la lecture et l’affichage des informations de base du message en évitant l’analyse et le chargement du corps du message pendant l’itération.

  • Efficacité : En ciblant uniquement les informations de base, il minimise la consommation de mémoire et le temps de traitement. Il est particulièrement appréciable lorsque l’on a affaire à des fichiers volumineux contenant de nombreux messages.

Pour lire, lister et afficher les messages dans un fichier mbox, nous allons suivre les étapes ci-dessous :

  • Importez les modules requis depuis la bibliothèque Aspose.Email : classes MboxStorageReader et MboxLoadOptions.

  • Créez une instance de la classe MboxLoadOptions. Cet objet contiendra diverses options pour charger le fichier.

  • Configurez les propriétés de l’objet :

    • Définissez leaveopen sur False si vous souhaitez fermer le fichier après l’avoir lu.
    • Définissez l’encodage de texte préféré sur ‘utf-8’ pour spécifier l’encodage de texte souhaité pour le contenu du message.
  • Ouvrez le fichier avec la méthode MboxStorageReader.createreader() de la classe MboxStorageReader.

  • Itérez sur chaque message du fichier à l’aide de la méthode enumeratemessageinfo() de l’objet mboxreader en extrayant des détails spécifiques de chaque message. Dans notre exemple, ils sont sujet, adresse, à et date.

L’extrait de code suivant illustre le processus d’itération dans les messages à l’aide de la méthode enumeratemessageinfo et leur récupération d’informations.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        print(message_info.subject)
        print(message_info.from_address)
        print(message_info.to)
        print(message_info.date)

De cette façon, nous pouvons accéder à des propriétés telles que Objet, De, À et Date et afficher les détails pertinents.

Approche 2 : méthode EnumerateMessages

Contrairement à la première approche, la seconde est destinée à parcourir directement les instances de MailMessage contenues dans le fichier mbox à l’aide de la méthode enumeratemessages. Cette méthode lit et charge l’intégralité du contenu du message à chaque itération, permettant un accès immédiat aux informations complètes de l’e-mail. Voici quelques aspects clés de cette approche :

  • Intégralité : il permet d’accéder et de traiter l’intégralité du contenu du message, y compris le corps, les pièces jointes, les en-têtes et d’autres parties.

  • Commodité : cette approche s’avère utile lorsque vous souhaitez effectuer des opérations sur le message complet, telles que l’enregistrement de chaque message dans un fichier séparé. Il simplifie le processus en chargeant l’intégralité du contenu du message à chaque itération, ce qui vous permet d’effectuer les opérations souhaitées sans avoir besoin de recherches ultérieures.

L’extrait de code suivant illustre le processus d’itération dans les messages à l’aide de la méthode enumeratemessages et la récupération de l’intégralité du contenu du message.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for eml in mbox_reader.enumerate_messages():
        eml.save(f"{eml.subject}.eml")

Il convient de noter que le chargement de l’intégralité du contenu du message pour chaque itération peut potentiellement affecter les performances, en particulier lorsqu’il s’agit de fichiers volumineux ou d’un nombre important de messages. Ainsi, il est important d’évaluer vos besoins spécifiques et de prendre en compte des facteurs tels que la taille du fichier, le nombre de messages et les opérations que vous avez l’intention d’effectuer pour déterminer l’approche la plus appropriée à votre situation.

Lire les messages dans les fichiers Mbox

Une autre manipulation que vous pourriez vouloir effectuer avec un fichier mbox est la lecture des messages qu’il contient. Vous pouvez le faire en utilisant leur identifiant de chaîne dérivé de la première approche d’énumération de MessageInfo.

Lorsque vous utilisez la méthode enumeratemessageinfo pour répertorier les messages, chaque message est associé à un identifiant unique dans un seul fichier mbox. Cet identifiant, généralement représenté sous forme de chaîne, peut être obtenu à partir de la propriété entryid de l’objet MboxMessageInfo.

Une fois que nous avons obtenu l’identifiant du message, nous pouvons l’utiliser pour afficher le contenu complet du message en suivant les étapes suivantes :

  • Nous créons une instance de EmlLoadOptions. Cet objet contiendra diverses options pour charger les fichiers EML.
  • Configurez les propriétés :
    • Définissez preserveembeddedmessageformat sur True si vous souhaitez conserver le format de message intégré dans le fichier EML.
    • Définissez preservetnefattachments sur True si vous souhaitez conserver les pièces jointes TNEF dans le fichier EML.
  • Créez une instance de MboxLoadOptions. Cet objet contiendra diverses options pour charger le fichier mbox.
  • Configurez les propriétés de mboxloadoptions :
    • Définissez leaveopen sur False si vous souhaitez fermer le fichier après l’avoir lu.
    • Définissez l’encodage de texte préféré sur ‘utf-8’ pour spécifier l’encodage de texte souhaité pour le contenu du message.
  • Ouvrez le fichier avec la méthode MboxStorageReader.createreader().
  • Dans la boucle foreach, nous accédons à la propriété EntryId de chaque objet MboxMessageInfo, qui représente l’identifiant unique du message correspondant.
  • Nous utilisons ensuite cet identifiant avec la méthode ExtractMessage de la classe MboxStorageReader pour récupérer le message complet sous la forme d’un objet MailMessage.
  • Enfin, nous pouvons effectuer toutes les opérations souhaitées sur le message, telles que l’enregistrer dans un fichier .eml séparé.

L’extrait de code ci-dessous montre comment lire un message individuel à l’aide de son identifiant de chaîne :

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions
from aspose.email import EmlLoadOptions

eml_load_options = EmlLoadOptions()
eml_load_options.preserve_embedded_message_format = True
eml_load_options.preserve_tnef_attachments = True

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        eml = mbox_reader.extract_message(message_info.entry_id, eml_load_options)
        eml.save(f"{eml.subject}.eml")

Un avantage significatif de cette approche est qu’elle vous permet de lire et de traiter de manière sélective des messages spécifiques sans tenir compte des autres. Cette flexibilité s’avère particulièrement bénéfique lorsqu’il s’agit de fichiers volumineux contenant un grand nombre de messages. En traitant sélectivement uniquement les messages souhaités, les calculs inutiles sont minimisés, ce qui améliore l’efficacité globale.

Il est crucial de comprendre que l’identifiant du message est unique au sein d’un même fichier. Ainsi, lorsque vous travaillez avec des messages sur plusieurs fichiers mbox, il devient nécessaire de maintenir un mappage entre ces identifiants et leurs fichiers correspondants.

Fonctionnalités utilitaires

La bibliothèque Aspose.Email offre plusieurs fonctionnalités utilitaires pour améliorer votre travail avec les fichiers mbox. Considérons-en quelques-unes :

Obtenir le nombre total d’articles stockés dans mbox

Il existe un moyen simple de déterminer le nombre total d’éléments (messages) stockés dans un fichier mbox. Utilisez la méthode gettotalitemscount() pour récupérer le nombre total d’éléments (messages) présents dans le fichier.

Le code suivant obtient le nombre total d’éléments (messages) présents dans le fichier.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
    items_count = mbox_reader.get_total_items_count()

Obtenir la taille des données lues en une itération

Pour obtenir la taille des données lues au cours d’une seule itération, vous pouvez accéder à la propriété currentdatasize de l’objet mboxreader pour récupérer la taille des données (message) en cours de lecture dans l’itération en cours.

Le code suivant parcourt chaque message du fichier. A chaque itération, la taille du message en cours de lecture est obtenue.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        message_size = mbox_reader.current_data_size

Conclusion

Dans cet article, nous avons exploré la mbox - un format standardisé et largement accepté pour stocker les messages électroniques. Sa simplicité et sa compatibilité avec divers clients et systèmes de messagerie en font un choix populaire pour l’archivage et le transfert de données de messagerie. Le format, y compris ses variantes, est pris en charge par notre puissante bibliothèque Aspose.Email for Python qui permet une lecture, une extraction et une manipulation faciles des données de messagerie. Nos extraits de code simples et nos étapes de code présentaient des instructions complètes et détaillées sur la façon d’ouvrir, de répertorier et d’afficher les messages dans les fichiers mbox.

Vous pouvez explorer d’autres fonctionnalités d’Aspose.Email en utilisant la documentation. Vous pouvez également poster vos questions sur notre forum.

Voir également