Lesen von MBOX‑Dateien
Aspose.Email-Lesefunktionen
Mozilla Thunderbird ist ein Open‑Source‑, plattformübergreifender E‑Mail‑Client, entwickelt von der Mozilla Foundation. Er speichert E‑Mails in seiner eigenen Dateistruktur und verwaltet Nachrichtenindizes sowie Unterordner über proprietäre Dateiformate. Thunderbird erstellt für jeden E‑Mail‑Ordner (z. B. Posteingang, Gesendet, Papierkorb) eine .mbox‑Datei und speichert diese im Profilverzeichnis des Benutzers. Jede Datei enthält alle Nachrichten dieses Ordners in zusammengefasster Form.
Aspose.Email für .NET bietet APIs zum Lesen von Nachrichten aus Thunderbird‑.mbox‑Dateien mittels der MboxrdStorageReader Klasse, die es Entwicklern ermöglicht:
- Nachrichten sequenziell öffnen und lesen, eine nach der anderen
- Metadaten wie Betreff, Von, An, Datum usw. abrufen, ohne den gesamten Inhalt zu laden
- Einzelne Nachrichten mit eindeutigen Kennungen (EntryId) extrahieren
- Kodierung, TNEF‑Anhänge und Formatierung beibehalten
- Dateien asynchron lesen für bessere Leistung bei großen Archiven
MBOX‑Dateien synchron lesen
nachrichten aus einer Mozilla‑Thunderbird‑Mail‑Speicherdatei lesen. Dieser Artikel zeigt, wie man Nachrichten aus dem Thunderbird‑E‑Mail‑Speicher liest:
- Öffnen Sie die Thunderbird‑Speicherdatei in FileStream.
- Erstellen Sie eine Instanz von dem MboxrdStorageReader Klasse und übergeben Sie den oben genannten Stream dem Konstruktor.
- Rufen Sie ReadNextMessage() um die erste Nachricht zu erhalten.
- Verwenden Sie denselben ReadNextMessage() in einer while‑Schleife, um alle Nachrichten zu lesen.
- Alle Streams schließen.
Das folgende Code‑Snippet zeigt, wie Sie alle Nachrichten aus einem Thunderbird‑Mail‑Speicher lesen.
// 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();
MBOX‑Dateien asynchron lesen
Um die Leistung und Reaktionsfähigkeit bei der Verarbeitung großer MBOX‑Dateien zu verbessern, bietet Aspose.Email für .NET asynchrones MBOX‑Lesen über die CreateReaderAsync Methode. Diese Funktion ist besonders nützlich in Anwendungen, die große E‑Mail‑Archive verarbeiten oder I/O‑intensive Vorgänge in Hintergrund‑Threads oder Web‑Services ausführen. Das folgende Beispiel demonstriert, wie man E‑Mail‑Nachrichten aus einer MBOX‑Datei asynchron mit einem Aspose.Email‑Speicherleser liest:
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}");
}
}
E‑Mail‑Nachrichten stapelweise mit Pagination‑Unterstützung lesen
Rufen Sie paginierten Zugriff auf in Mailbox‑Dateien gespeicherte Nachrichten ab. Diese Funktion ermöglicht Entwicklern, große E‑Mail‑Archive effizienter zu verarbeiten, indem Nachrichten in kleineren Portionen abgerufen werden – was die Leistung verbessert und die Speicherauslastung reduziert. Verwenden Sie die folgenden Methoden des MboxStorageReader Klasse:
-
EnumerateMessages(int startIndex, int count) - Gibt eine aufzählbare Sammlung von MailMessage‑Instanzen zurück, beginnend beim angegebenen Index und begrenzt durch die angegebene Anzahl.
-
EnumerateMessageInfo(int startIndex, int count) - Gibt eine aufzählbare Sammlung von MboxMessageInfo‑Objekten zurück, die nur Metadaten enthalten, ebenfalls paginiert nach Index und Anzahl.
Das nachstehende Beispiel zeigt, wie man einen bestimmten Nachrichtenbereich aus einem Mail‑Archiv liest, indem man einen Startindex und eine Batch‑Größe definiert. Im Beispiel ruft die Methode 10 Nachrichten ab, beginnend bei 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);
}
Bevorzugte Textkodierung festlegen beim Laden von MBOX‑Dateien zum Lesen
Kodierungsoption ist verfügbar für MboxrdStorageReader Klasse. Dies bietet zusätzliche Optionen zum Laden der MBOX-Datei und stellt sicher, dass Nachrichten mit dem codierten Inhalt korrekt gelesen und verarbeitet werden. Das folgende Code‑Snippet zeigt, wie Sie die Textkodierung festlegen können, die Ihren Anforderungen entspricht:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Gesamtzahl der Nachrichten aus MBOX‑Dateien ermitteln
Die MboxrdStorageReader Klasse bietet die Möglichkeit, die Anzahl der Elemente in einer MBox-Datei zu lesen. Dies kann verwendet werden, um Anwendungen zu entwickeln, die den Fortschritt einer Aktivität beim Verarbeiten einer solchen Datei anzeigen.
// 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());
}
Aktuelle Nachrichtengröße abrufen
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();
}
}