Läsa MBOX-filer
Aspose.Email läsfunktioner
Mozilla Thunderbird är en öppen källkod, plattformsoberoende e‑postklient, utvecklad av Mozilla Foundation. Den lagrar e‑post i sin egen filstruktur och hanterar meddelandeindex och undermappar via proprietära filformat. Thunderbird skapar en .mbox‑fil för varje e‑postmapp (t.ex. Inkorg, Skickat, Papperskorg) och lagrar dessa filer i användarens profilmapp. Varje fil innehåller alla meddelanden från den mappen i en sammansatt form.
Aspose.Email för .NET tillhandahåller API:er för att läsa meddelanden från Thunderbird .mbox-filer med hjälp av MboxrdStorageReader klass som möjliggör för utvecklare att:
- Öppna och läs meddelanden sekventiellt, ett i taget
- Hämta metadata som Ämne, Från, Till, Datum osv., utan att ladda hela innehållet
- Extrahera enskilda meddelanden med unika identifierare (EntryId)
- Bevara kodning, TNEF‑bilagor och formatering
- Läs filer asynkront för bättre prestanda på stora arkiv
Läs MBOX-filer synkront
läsa meddelanden från Mozilla Thunderbird‑brevlådefil. Denna artikel visar hur man läser meddelanden från Thunderbird‑e‑postlagring:
- Öppna Thunderbirds lagringsfil i FileStream.
- Skapa en instans av MboxrdStorageReader klassen och skicka den ovanstående strömmen till konstruktorn.
- Anropa ReadNextMessage() för att hämta det första meddelandet.
- Använd samma ReadNextMessage() i en while‑loop för att läsa alla meddelanden.
- Stäng alla strömmar.
Följande kodsnutt visar hur du läser alla meddelanden från Thunderbirds e‑postlagring.
// 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();
Läs MBOX-filer asynkront
För att förbättra prestanda och svarstid vid bearbetning av stora MBOX-filer tillhandahåller Aspose.Email för .NET asynkron MBOX-läsning via CreateReaderAsync metod. Denna funktion är särskilt användbar i applikationer som hanterar stora e-postarkiv eller kör I/O‑tunga operationer i bakgrundstrådar eller webbtjänster. Följande kodexempel visar hur man läser e‑postmeddelanden från en MBOX-fil asynkront med en Aspose.Email‑lagringsläsare:
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}");
}
}
Läs e-postmeddelanden i batchar med pagineringsstöd
Få paginerad åtkomst till meddelanden lagrade i brevlådefiler. Denna funktion gör det möjligt för utvecklare att bearbeta stora e-postarkiv mer effektivt genom att hämta meddelanden i mindre portioner – vilket förbättrar prestanda och minskar minnesbelastningen. Använd följande metoder i MboxStorageReader klass:
-
EnumerateMessages(int startIndex, int count) - Returnerar en enumererbar samling av MailMessage-instansar, med start från det angivna indexet och begränsade till det givna antalet.
-
EnumerateMessageInfo(int startIndex, int count) - Returnerar en enumererbar samling av MboxMessageInfo-objekt med endast metadata, även paginerade efter index och antal.
Kodexemplet nedan visar hur man läser ett specifikt intervall av meddelanden från ett e-postarkiv genom att definiera ett startindex och en batchstorlek. I exemplet hämtar metoden 10 meddelanden med start från 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);
}
Ställ in föredragen textkodning när MBOX-filer läses in
Kodningsalternativ finns tillgängligt för MboxrdStorageReader klass. Detta ger ytterligare alternativ för att läsa in mbox-filen och säkerställer att meddelanden med den kodade innehållet läses och bearbetas korrekt. Följande kodsnutt visar hur du kan ställa in textkodning som uppfyller dina behov:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Hämta totalt antal meddelanden från MBOX-filer
Den MboxrdStorageReader klassen ger möjlighet att läsa antalet objekt som finns i en MBox‑fil. Detta kan användas för att utveckla applikationer som visar aktivitetsförloppet under bearbetning av en sådan fil.
// 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());
}
Hämta aktuell meddelandestorlek
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();
}
}