Programmation avec Thunderbird
Lecture de fichiers 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 la classe permet aux développeurs de lire les messages d’un fichier de stockage de courrier Mozilla Thunderbird. Cet article montre comment lire les messages depuis le stockage de courriel 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();
Récupération des propriétés du message
MboxMessageInfo la classe contient les propriétés suivantes pour récupérer des informations sur un message :
- DateTime Date - Obtient la date du message
- MailAddress From - Obtient l’adresse d’expéditeur
- string Subject - Obtient l’objet du message
- MailAddressCollection À - Obtient la collection d’adresses contenant les destinataires du message
- MailAddressCollection CC - Obtient la collection d’adresses contenant les destinataires CC
- MailAddressCollection Bcc - Obtient la collection d’adresses contenant les destinataires CCI du message
MboxStorageReader reader = MboxStorageReader.CreateReader(fileName, new MboxLoadOptions());
foreach (var mboxMessageInfo in reader.EnumerateMessageInfo())
{
Console.Writeline($"Subject: {mboxMessageInfo.Subject}");
Console.Writeline($"Date: {mboxMessageInfo.Date}");
Console.Writeline($"From: {mboxMessageInfo.From}");
Console.Writeline($"To: {mboxMessageInfo.To}");
Console.Writeline($"CC: {mboxMessageInfo.CC}");
Console.Writeline($"Bcc: {mboxMessageInfo.Bcc}");
}
Extraire des messages d’un MBOX par identifiants
Le MboxStorageReader la classe inclut le EnumerateMessageInfo() méthode, qui vous permet d’itérer sur chaque message d’un fichier MBOX. En utilisant cette méthode, il devient possible d’extraire des messages individuels sans devoir parcourir toute la sauvegarde à plusieurs reprises. Cela améliore les performances et réduit le temps de traitement.
Le MboxMessageInfo classe fournit le EntryId propriété, qui fournit l’accès aux identifiants uniques de chaque message dans le fichier MBOX. Cet identifiant peut être stocké dans une base de données ou utilisé comme référence pour trouver et extraire rapidement des messages spécifiques lorsque nécessaire.
Le ExtractMessage(string id) méthode dans le MboxStorageReader la classe permet aux développeurs d’extraire des messages basés sur leur EntryId unique. Avec le ExtractMessage(string id) méthode, vous pouvez exploiter l’EntryId stocké pour récupérer le message correspondant et effectuer des opérations supplémentaires avec celui‑ci.
L’exemple de code suivant montre comment extraire des messages d’un fichier MBOX à l’aide d’identifiants :
MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());
foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}
Configurer les options de chargement lors de la lecture des messages depuis un MBOX
Les fonctionnalités suivantes vous permettront de spécifier diverses options liées au chargement et au traitement des messages :
-
Propriété MailStorageConverter.MboxMessageOptions – Obtient ou définit les options de chargement des e‑mails lors de l’analyse d’un stockage Mbox.
-
Méthode MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) – le paramètre EmlLoadOptions spécifie les options lors de la lecture d’un message depuis le stockage Mbox.
var reader = new MboxrdStorageReader(fileName, new MboxLoadOptions());
// Read messages preserving tnef attachments.
var eml = reader.ReadNextMessage(new EmlLoadOptions {PreserveTnefAttachments = true});
MailStorageConverter.MboxMessageOptions(new EmlLoadOptions {PreserveTnefAttachments = true});
// Convert messages from mbox to pst preserving tnef attachments.
var pst = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");
Définir l’encodage de texte préféré lors du chargement de fichiers Mbox pour la lecture
L’option d’encodage est disponible pour la classe MboxrdStorageReader. Elle offre des options supplémentaires pour charger le fichier mbox et garantit que les messages au contenu encodé seront correctement lus et traités. L’extrait de code suivant montre comment 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 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.
// 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();
}
}
Conversion de MBOX en PST en conservant ou en supprimant une signature
Pour supprimer la signature d’un fichier pendant le processus de conversion, définissez le MboxToPstConversionOptions.RemoveSignature propriété à true.
L’exemple de code suivant montre comment utiliser cette propriété :
var pstDataStream = new MemoryStream();
var personalStorage = PersonalStorage.Create(pstDataStream, FileFormatVersion.Unicode);
MailStorageConverter.MboxToPst(new MboxrdStorageReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), new MboxLoadOptions()),
personalStorage,
"Inbox",
new MboxToPstConversionOptions() { RemoveSignature = true });
Écriture de fichiers MBOX
Le MboxrdStorageWriter la classe fournit la fonctionnalité d’écrire de nouveaux messages dans le fichier de stockage de courriels Thunderbird. Pour écrire des messages :
- Ouvrez le fichier de stockage Thunderbird dans FileStream.
- Créez une instance de la MboxrdStorageWriter classe et passez le flux ci‑dessus au constructeur.
- Préparez un nouveau message en utilisant le MailMessage classe.
- Appelez le WriteMessage() méthode et passez ce qui précède MailMessage instance pour ajouter le message au stockage Thunderbird.
- Fermez tous les flux.
L’extrait de code suivant montre comment écrire des messages dans le stockage de courriels Thunderbird.
// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Write);
// Initialize MboxStorageWriter and pass the above stream to it
var writer = new MboxrdStorageWriter(stream, false);
// Prepare a new message using the MailMessage class
var message = new MailMessage("from@domain.com", "to@domain.com", Guid.NewGuid().ToString(), "added from Aspose.Email");
message.IsDraft = false;
// Add this message to storage
writer.WriteMessage(message);
// Close all related streams
writer.Dispose();
stream.Close();
Diviser le stockage MBOX/Annuler l’opération de division
Aspose.Email propose des méthodes pour diviser le stockage Mbox en parties plus petites, facilitant ainsi la gestion de grandes archives d’e‑mail. Selon la version .NET que vous utilisez, les méthodes disponibles et leurs paramètres peuvent varier. Ci‑dessous les méthodes de la MboxStorageReader classe utilisée à la fois pour les versions .NET Framework 4.5 et .NET Core ainsi que pour les versions antérieures à 4.5.
Membres pour .NET Framework 4.5 et les versions .NET Core :
-
SplitInto(long chunkSize, string outputPath, CancellationToken token) - Divise le stockage Mbox en parties plus petites selon la taille de bloc spécifiée.
-
Paramètres :
- chunkSize : La taille approximative de chaque fragment en octets.
- outputPath : Le chemin du dossier où les fragments seront créés.
- token : Un CancellationToken qui permet l’annulation éventuelle de l’opération.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Divise le stockage Mbox en parties plus petites avec un préfixe de nom de fichier spécifié pour chaque partie.
-
Paramètres :
- chunkSize : La taille approximative de chaque fragment en octets.
- outputPath : Le chemin du dossier où les fragments seront créés.
- partFileNamePrefix : Le préfixe à ajouter au nom de fichier de chaque partie.
- token : Un CancellationToken qui permet l’annulation éventuelle de l’opération.
Membres pour les versions .NET Framework antérieures à 4.5 :
-
SplitInto(long chunkSize, string outputPath) - Divise le stockage Mbox en parties plus petites selon la taille de bloc spécifiée.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - Divise le stockage Mbox en parties plus petites avec un préfixe de nom de fichier spécifié pour chaque partie.
-
Cancel() – Interrompt une opération de division en cours.
Les exemples de code suivants démontrent comment diviser un fichier MBOX en parties tout en limitant le processus à un maximum de cinq parties, en utilisant un mécanisme d’annulation :
.NET Framework 4.5 et .NET Core :
int partCount = 0;
var tokenSource = new CancellationTokenSource();
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
// Subscribe to events
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
tokenSource.Cancel();
};
System.Threading.Tasks.Task task = mbox.SplitInto(10000000, outputPath, tokenSource.Token);
task.Wait();
.NET Framework inférieur à 4.5 :
int partCount = 0;
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
mbox.SplitInto(10000000, outputPath);
mbox.MboxFileCreated += (sender, e) =>
{
partCount++;
if (partCount >= 5)
mbox.Cancel();
};