MBOX‑bestanden lezen
Aspose.Email leesmogelijkheden
Mozilla Thunderbird is een opensource, cross‑platform e‑mailclient, ontwikkeld door de Mozilla Foundation. Het slaat e‑mails op in zijn eigen bestandsstructuur en beheert berichtindexen en submappen via propriëtaire bestandsformaten. Thunderbird maakt één .mbox‑bestand aan voor elke e‑mailmap (bijv. Inbox, Sent, Trash) en slaat deze bestanden op in de gebruikersprofielmap. Elk bestand bevat alle berichten van die map in een aaneengeschakelde vorm.
Aspose.Email voor .NET biedt API’s voor het lezen van berichten uit Thunderbird .mbox‑bestanden met behulp van de MboxrdStorageReader klasse die ontwikkelaars in staat stelt om:
- Open en lees berichten opeenvolgend, één voor één
- Haal metadata op zoals Onderwerp, Van, Aan, Datum, enz., zonder de volledige inhoud te laden
- Extraheer individuele berichten met unieke identificatoren (EntryId)
- Behoud codering, TNEF‑bijlagen en opmaak
- Lees bestanden asynchroon voor betere prestaties bij grote archieven
Lees MBOX‑bestanden synchroon
lees berichten uit een Mozilla Thunderbird‑mailopslagbestand. Dit artikel toont hoe je de berichten uit Thunderbird‑e‑mailopslag kunt lezen:
- Open het Thunderbird‑opslagbestand in FileStream.
- Maak een instantie van de MboxrdStorageReader klasse en geef de bovenstaande stream door aan de constructor.
- Roep ReadNextMessage() om het eerste bericht te krijgen.
- Gebruik dezelfde ReadNextMessage() in een while‑lus om alle berichten te lezen.
- Sluit alle streams.
Het volgende code‑fragment laat zien hoe je alle berichten uit een Thunderbird‑mailopslag kunt lezen.
// 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();
Lees MBOX‑bestanden asynchroon
Om de prestaties en reactietijd bij het verwerken van grote MBOX‑bestanden te verbeteren, biedt Aspose.Email voor .NET asynchroon MBOX‑lezen via de CreateReaderAsync methode. Deze functie is vooral nuttig in toepassingen die grote e‑mailarchieven verwerken of I/O‑intensieve bewerkingen uitvoeren in achtergrondthreads of webservices. Het onderstaande codevoorbeeld laat zien hoe je e‑mailberichten asynchroon kunt lezen uit een MBOX‑bestand met behulp van een Aspose.Email‑opslaglezer:
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}");
}
}
Lees e‑mailberichten in batches met pagineringondersteuning
Verkrijg gepagineerde toegang tot berichten die in mailbox‑bestanden zijn opgeslagen. Deze functie stelt ontwikkelaars in staat om grote e‑mailarchieven efficiënter te verwerken door berichten in kleinere porties op te halen – wat de prestaties verbetert en de geheugendruk vermindert. Gebruik de volgende methoden van de MboxStorageReader klasse:
-
EnumerateMessages(int startIndex, int count) - Retourneert een enumerateerbare verzameling van MailMessage‑instanties, beginnend bij de opgegeven index en beperkt tot het opgegeven aantal.
-
EnumerateMessageInfo(int startIndex, int count) - Retourneert een enumerateerbare verzameling van MboxMessageInfo‑objecten met alleen metadata, tevens gepagineerd op index en aantal.
Het onderstaande codevoorbeeld laat zien hoe je een specifiek bereik van berichten uit een mailarchief kunt lezen door een start‑index en batch‑grootte te definiëren. In het voorbeeld haalt de methode 10 berichten op, beginnend bij index 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);
}
Stel gewenste tekstcodering in bij het laden van MBOX‑bestanden voor lezen
Coderingsoptie is beschikbaar voor MboxrdStorageReader class. Dit biedt extra opties voor het laden van het mbox‑bestand en zorgt ervoor dat berichten met gecodeerde inhoud correct worden gelezen en verwerkt. De volgende code‑fragment toont hoe je tekencodering kunt instellen die aan je behoeften voldoet:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Het totale aantal berichten uit MBOX‑bestanden ophalen
De MboxrdStorageReader klasse biedt de mogelijkheid om het aantal items in een MBox‑bestand te lezen. Dit kan worden gebruikt om applicaties te ontwikkelen die de voortgang van de activiteit tonen tijdens het verwerken van zo’n bestand.
// 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());
}
Huidige berichtgrootte ophalen
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();
}
}