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:

  1. Öppna Thunderbirds lagringsfil i FileStream.
  2. Skapa en instans av MboxrdStorageReader klassen och skicka den ovanstående strömmen till konstruktorn.
  3. Anropa ReadNextMessage() för att hämta det första meddelandet.
  4. Använd samma ReadNextMessage() i en while‑loop för att läsa alla meddelanden.
  5. 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:

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();
    }
}