Programmation avec Thunderbird

Lire les messages depuis MBOX

Mozilla Thunderbird est un client de messagerie open‑source, multiplateforme, développé par la Fondation Mozilla. Il stocke les e‑mails dans sa propre structure de fichiers, gérant les index des messages et les sous‑dossiers via des formats de fichiers propriétaires. Aspose.Email peut travailler avec les structures de stockage de courrier de Thunderbird. Le MboxrdStorageReader classe qui permet aux développeurs de lire les messages depuis le fichier de stockage de courrier de Mozilla Thunderbird. Cet article montre comment lire les messages depuis le stockage de courrier Thunderbird :

  1. Ouvrez le fichier de stockage de Thunderbird dans FileStream.
  2. Créez une instance de la MboxrdStorageReader classe et passez le flux ci‑dessus au constructeur.
  3. Appelez ReadNextMessage() pour obtenir le premier message.
  4. Utilisez le même ReadNextMessage() dans une boucle while pour lire tous les messages.
  5. Fermez tous les flux.

L’extrait de code suivant montre comment lire tous les messages depuis le stockage de courrier de Thunderbird.

//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
    MboxLoadOptions lo = new MboxLoadOptions();
    lo.setLeaveOpen(false);
    try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
        MailMessage msg;
        String[] fromMarker = {null};
        while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
            System.out.println(fromMarker[0]);
        }
    }
}

Configurer les options de chargement lors de la lecture des messages depuis MBOX

L’API Aspose.Email permet les manipulations suivantes des messages lors de leur lecture depuis un fichier MBOX :

Convertir les messages de MBOX vers PST en préservant les pièces jointes TNEF

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

MailStorageConverter.MboxMessageOptions() propriété - Obtient ou définit les options de chargement d’e-mail lors de l’analyse d’un stockage Mbox.

Lire les messages en préservant les pièces jointes TNEF

MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);

MboxrdStorageReader.readNextMessage(EmlLoadOptions options) méthode - Le paramètre EmlLoadOptions spécifie les options lors de la lecture d’un message depuis le stockage Mbox.

Énumérer les messages en préservant les pièces jointes TNEF

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
    // do something
}

MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) méthode - Spécifie EmlLoadOptions lors de la lecture d’un message depuis le stockage Mbox.

Extraire des messages d’un MBOX par identifiants

Il est parfois nécessaire d’extraire des messages sélectionnés par leurs identifiants. Par exemple, votre application stocke les identifiants dans une base de données et extrait un message à la demande. C’est le moyen efficace d’éviter de parcourir tout le stockage à chaque fois pour trouver un message spécifique à extraire. Pour implémenter cette fonctionnalité pour les fichiers MBOX, Aspose.Email fournit les méthodes et classes suivantes :

L’exemple de code ci‑dessous montre comment extraire des messages d’un MBOX par identifiants :

MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());

for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
    MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}

Remarque : L’ID du message est unique dans le fichier de stockage. Les ID sont créés par Aspose.Email et ne peuvent pas être utilisés dans d’autres bibliothèques ou applications tierces de traitement MBOX.

Filtrer et rechercher des e‑mails dans les fichiers MBOX

Aspose.Email for Java offre la capacité de filtrer ou rechercher des messages dans les fichiers MBOX à l’aide d’une requête. Cela permet de ne récupérer que les messages correspondant à des critères spécifiques. Ainsi, vous pouvez améliorer les performances et la convivialité d’une application lorsqu’elle traite de gros fichiers MBOX.

L’exemple de code ci‑dessus montre comment implémenter cette fonctionnalité en réalisant les méthodes suivantes :

  • enumerateMessages(MailQuery query) - renvoie une collection énumérable d’instances MailMessage correspondant à la requête spécifiée.

  • enumerateMessageInfo(MailQuery query) - renvoie une collection énumérable d’instances MboxMessageInfo correspondant à la requête spécifiée.

MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());

for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
    System.out.println("Subject: " + message.getSubject());
}

Récupération paginée des messages à partir de fichiers MBOX

Aspose.Email for Java prend en charge la récupération paginée des messages à partir de fichiers MBOX. Cette fonctionnalité permet un traitement efficace des gros fichiers MBOX en récupérant les messages par lots plus petits, réduisant la consommation de mémoire et améliorant les performances.

L’exemple de code ci‑dessus montre comment implémenter cette fonctionnalité en réalisant les méthodes suivantes :

  • enumerateMessages(int startIndex, int count) - récupère un nombre spécifié d’instances MailMessage à partir d’un index donné.

  • enumerateMessageInfo(int startIndex, int count) - récupère un nombre spécifié d’instances MboxMessageInfo à partir d’un index donné.

MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10

for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
    System.out.println("Subject: " + message.getSubject());
}

Écriture de messages

Le MboxrdStorageWriter classe qui fournit la possibilité d’écrire de nouveaux messages dans le fichier de stockage de courrier de Thunderbird. Pour écrire des messages :

  1. Ouvrez le fichier de stockage Thunderbird dans FileStream.
  2. Créez une instance de la MboxrdStorageWriter classe et passez le flux ci‑dessus au constructeur.
  3. Préparez un nouveau message en utilisant le MailMessage classe.
  4. Appelez le WriteMessage() méthode et passez ce qui précède MailMessage instance pour ajouter le message au stockage Thunderbird.
  5. Fermez tous les flux.

L’extrait de code suivant vous montre comment écrire des messages dans le stockage de courrier de Thunderbird.

//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
    try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
        MailMessage msg = MailMessage.load(dataDir + "Message.msg");
        String[] fromMarker = {null};
        writer.writeMessage(msg, fromMarker);
        System.out.println(fromMarker[0]);
    }
}

Obtenir le nombre total de messages d’un fichier MBox

Le MboxrdStorageReader classe qui offre la capacité de lire le nombre d’éléments disponibles dans un fichier MBox. Ceci peut être utilisé pour développer des applications affichant la progression de l’activité lors du traitement d’un tel fichier.

MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
    System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}

Obtenir la taille du message actuel

FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
    MailMessage msg = null;
    while ((msg = reader.readNextMessage()) != null) {
        //returns the number of bytes read
        long currentDataSize = reader.getCurrentDataSize();
        System.out.println("Bytes read: " + currentDataSize);
    }
}

Définir l’encodage de texte préféré lors du chargement des fichiers Mbox

Le setPreferredTextEncoding(Charset value) méthode du MboxLoadOptions classe qui obtient ou définit l’encodage préféré pour les messages. Créez un lecteur pour le fichier Mbox avec les options de chargement spécifiées et vos messages avec le contenu encodé seront correctement lus et traités. L’exemple de code suivant montre comment implémenter cette fonctionnalité dans un projet :

MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();

Diviser le stockage Mbox en parties plus petites

Aspose.Email fournit les composants suivants conçus pour offrir un meilleur contrôle du traitement du stockage Mbox, vous permettant de diviser les gros fichiers en parties gérables et d’implémenter des actions personnalisées pendant le processus :

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Une variante de la méthode précédente, celle‑ci vous permet également de spécifier un préfixe personnalisé pour les noms des fichiers Mbox découpés.

MboxStorageReader.setEmlCopyingEventHandler Événement Cet événement se produit avant qu’un e‑mail ne soit copié vers un nouveau fichier Mbox. Vous pouvez personnaliser les actions avant le traitement des e‑mails.

MboxStorageReader.setEmlCopiedEventHandler Événement Cet événement se produit après qu’un e‑mail a été copié vers un nouveau fichier Mbox. Vous pouvez effectuer des actions de post‑traitement sur les e‑mails.

MboxStorageReader.setMboxFileCreatedEventHandler Événement Cet événement se produit lorsqu’un nouveau fichier Mbox est créé. Vous pouvez gérer cet événement pour réagir à la création du fichier.

MboxStorageReader.setMboxFileFilledEventHandler Event Cet événement se produit lorsqu’un nouveau fichier Mbox est rempli d’e‑mails. Vous pouvez réagir à la population du fichier avec des e‑mails.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) représente un délégué pour gérer les événements qui se produisent après la création ou le traitement d’un nouveau fichier de stockage.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) représente un délégué pour gérer les événements liés à la copie d’éléments Mime, généralement utilisé dans les scénarios où un objet MailMessage est copié d’un stockage à un autre.

NewStorageEventArgs représente les arguments utilisés dans les événements déclenchés après la création d’un nouveau fichier de stockage ou après son traitement.

MimeItemCopyEventArgs représente les arguments d’événement liés à la copie d’un objet MailMessage d’un stockage à un autre, soit avant le début de la copie, soit après son achèvement.

L’exemple de code ci‑dessous montre comment interagir avec les fichiers Mbox, gérer les événements liés à ces fichiers et effectuer des opérations comme diviser le stockage Mbox en parties plus petites tout en suivant le nombre de messages et le nombre de parties :

messageCount = 0;
partCount = 0;

// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);

// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("New Mbox file created: " + e.getFileName());
        partCount++;
    }
});

mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("Mbox file filled with messages: " + e.getFileName());
    }
});

mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
    public void invoke(Object sender, MimeItemCopyEventArgs e) {
        System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
        messageCount++;
    }
});

// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");

// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);