Lecture de fichiers MBOX
Capacités de lecture d’Aspose.Email
Mozilla Thunderbird est un client de messagerie open‑source et 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. Thunderbird crée un fichier .mbox pour chaque dossier de messagerie (par ex., Boîte de réception, Envoyés, Corbeille) et enregistre ces fichiers dans le répertoire de profil de l’utilisateur. Chaque fichier contient tous les messages de ce dossier sous forme concaténée.
Aspose.Email pour .NET fournit des API pour lire les messages des fichiers .mbox de Thunderbird en utilisant le MboxrdStorageReader classe qui permet aux développeurs de :
- Ouvrir et lire les messages séquentiellement, un par un
- Récupérer les métadonnées comme Sujet, De, À, Date, etc., sans charger le contenu complet
- Extraire des messages individuels à l’aide d’identifiants uniques (EntryId)
- Conserver l’encodage, les pièces jointes TNEF et le formatage
- Lire les fichiers de façon asynchrone pour de meilleures performances sur les grandes archives
Lire les fichiers MBOX de façon synchrone
lire les messages d’un fichier de stockage de courrier Mozilla Thunderbird. Cet article montre comment lire les messages depuis le stockage d’e‑mail Thunderbird :
- Ouvrez le fichier de stockage Thunderbird dans FileStream.
- Créez une instance de la MboxrdStorageReader classe et passez le flux ci‑dessus au constructeur.
- Appelez ReadNextMessage() pour obtenir le premier message.
- Utilisez le même ReadNextMessage() dans une boucle while pour lire tous les messages.
- Fermez tous les flux.
L’extrait de code suivant montre comment lire tous les messages depuis le stockage de courrier de Thunderbird.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Create an instance of the MboxrdStorageReader class and pass the stream
var reader = new MboxrdStorageReader(stream, false);
// Start reading messages
var message = reader.ReadNextMessage();
// Read all messages in a loop
while (message != null)
{
// Manipulate message - show contents
Console.WriteLine("Subject: " + message.Subject);
// Save this message in EML or MSG format
message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);
// Get the next message
message = reader.ReadNextMessage();
}
// Close the streams
reader.Dispose();
stream.Close();
Lire les fichiers MBOX de façon asynchrone
Pour améliorer les performances et la réactivité lors du traitement de gros fichiers MBOX, Aspose.Email pour .NET propose une lecture asynchrone des MBOX via le CreateReaderAsync méthode. Cette fonctionnalité est particulièrement utile dans les applications qui gèrent de grandes archives d’e‑mail ou exécutent des opérations I/O en arrière‑plan ou des services web. L’exemple de code suivant montre comment lire des messages e‑mail depuis un fichier MBOX de façon asynchrone à l’aide d’un lecteur de stockage Aspose.Email :
string mboxFilePath = "emails.mbox";
// Create a reader for the MBOX file asynchronously
using (var reader = await MboxrdStorageReader.CreateReaderAsync(mboxFilePath, CancellationToken.None))
{
Console.WriteLine("MBOX reader initialized.");
// Read messages from the MBOX file
while (reader.ReadNextMessage() is var message && message != null)
{
Console.WriteLine($"Subject: {message.Subject}");
}
}
Lire les messages e‑mail par lots avec prise en charge de la pagination
Obtenez un accès paginé aux messages stockés dans les fichiers de boîte aux lettres. Cette fonctionnalité permet aux développeurs de traiter les grandes archives d’e‑mail plus efficacement en récupérant les messages par petits morceaux – améliorant les performances et réduisant la charge mémoire. Utilisez les méthodes suivantes de MboxStorageReader classe:
-
EnumerateMessages(int startIndex, int count) - Retourne une collection énumérable d’instances MailMessage, à partir de l’index spécifié et limitée au nombre donné.
-
EnumerateMessageInfo(int startIndex, int count) - Retourne une collection énumérable d’objets MboxMessageInfo contenant uniquement les métadonnées, également paginée par index et nombre.
L’exemple de code ci‑dessous montre comment lire une plage spécifique de messages d’une archive de courrier en définissant un indice de départ et une taille de lot. Dans l’exemple, la méthode récupère 10 messages à partir de l’indice 0.
using Aspose.Email.Storage.Mbox;
using Aspose.Email;
var reader = MboxStorageReader.CreateReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10
foreach (var message in reader.EnumerateMessages(startIndex, count))
{
Console.WriteLine("Subject: " + message.Subject);
}
Définir l’encodage de texte préféré lors du chargement de fichiers MBOX en lecture
L’option d’encodage est disponible pour MboxrdStorageReader classe. Cela fournit des options supplémentaires pour le chargement du fichier mbox et garantit que les messages contenant le contenu encodé seront correctement lus et traités. Le fragment de code suivant montre comment vous pouvez définir l’encodage du texte qui répond à vos besoins :
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Obtenir le nombre total de messages des fichiers 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.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
Console.WriteLine("Total number of messages in Mbox file: " + reader.GetTotalItemsCount());
}
Obtenir la taille du message actuel
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
MailMessage msg;
while ((msg = reader.ReadNextMessage()) != null)
{
long currentDataSize = reader.CurrentDataSize;
msg.Dispose();
}
}