Programmieren mit Thunderbird
MBOX‑Dateien lesen
Mozilla Thunderbird ist ein Open‑Source‑E‑Mail‑Client, plattformübergreifend, entwickelt von der Mozilla Foundation. Er speichert E‑Mails in einer eigenen Dateistruktur und verwaltet Nachrichtenindizes sowie Unterordner über proprietäre Dateiformate. Aspose.Email kann mit den Thunderbird‑Mail‑Speicherstrukturen arbeiten. Der MboxrdStorageReader Die Klasse ermöglicht Entwicklern, Nachrichten aus der Mozilla Thunderbird‑Mail‑Speicherdatei zu lesen. Dieser Artikel zeigt, wie Nachrichten aus dem Thunderbird‑E‑Mail‑Speicher gelesen werden:
- Ö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();
Abrufen von Nachrichteneigenschaften
MboxMessageInfo Klasse enthält die folgenden Eigenschaften, um Informationen über eine Nachricht abzurufen:
- DateTime Date - Gibt das Datum der Nachricht zurück
- MailAddress From - Gibt die Absenderadresse zurück
- string Subject - Gibt den Betreff der Nachricht zurück
- MailAddressCollection To - Gibt die Adresssammlung zurück, die die Empfänger der Nachricht enthält
- MailAddressCollection CC - Gibt die Adresssammlung zurück, die die CC‑Empfänger enthält
- MailAddressCollection Bcc - Gibt die Adresssammlung zurück, die die BCC‑Empfänger der Nachricht enthält
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}");
}
Nachrichten aus MBOX anhand von Kennungen extrahieren
Die MboxStorageReader Klasse enthält die EnumerateMessageInfo() Methode, die es Ihnen ermöglicht, durch jede Nachricht in einer MBOX‑Datei zu iterieren. Durch die Nutzung dieser Methode können einzelne Nachrichten extrahiert werden, ohne das gesamte Speichersystem wiederholt durchlaufen zu müssen. Dies verbessert die Leistung und reduziert die Verarbeitungszeit.
Die MboxMessageInfo class provides the EntryId Eigenschaft, die Zugriff auf eindeutige Kennungen jeder Nachricht in der MBOX‑Datei bietet. Diese Kennung kann in einer Datenbank gespeichert oder als Referenz verwendet werden, um bei Bedarf schnell bestimmte Nachrichten zu finden und zu extrahieren.
Die ExtractMessage(string id) Methode in der MboxStorageReader Die Klasse ermöglicht Entwicklern, Nachrichten anhand ihrer eindeutigen EntryId zu extrahieren. Mit der ExtractMessage(string id) Methode, Sie können die gespeicherte EntryId nutzen, um die entsprechende Nachricht abzurufen und weitere Vorgänge damit auszuführen.
Das folgende Codebeispiel demonstriert, wie Nachrichten aus einer MBOX‑Datei mithilfe von Kennungen extrahiert werden:
MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());
foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}
Konfigurieren der Ladeoptionen beim Lesen von Nachrichten aus MBOX
Die folgenden Funktionen ermöglichen es, verschiedene Optionen zum Laden und Verarbeiten von Nachrichten festzulegen:
-
MailStorageConverter.MboxMessageOptions‑Eigenschaft – Ruft Optionen zum Laden von E‑Mails ab oder legt sie fest, wenn ein Mbox‑Speicher geparst wird.
-
MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options)-Methode – Der Parameter EmlLoadOptions gibt Optionen beim Lesen einer Nachricht aus dem Mbox‑Speicher an.
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");
Festlegen der bevorzugten Textcodierung beim Laden von Mbox‑Dateien zum Lesen
Die Kodierungsoption ist für die Klasse MboxrdStorageReader verfügbar. Sie bietet zusätzliche Optionen zum Laden der Mbox‑Datei und stellt sicher, dass Nachrichten mit kodiertem Inhalt korrekt gelesen und verarbeitet werden. Das folgende Code‑Snippet zeigt, wie Sie die Textkodierung einstellen, die Ihren Anforderungen entspricht:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Ermitteln der Gesamtanzahl von Nachrichten aus einer MBOX‑Datei
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();
}
}
MBOX nach PST konvertieren – Signatur erhalten oder entfernen
Um die Signatur während des Konvertierungsprozesses aus einer Datei zu entfernen, setzen Sie die MboxToPstConversionOptions.RemoveSignature Eigenschaft auf true setzen.
Das folgende Codebeispiel zeigt, wie diese Eigenschaft verwendet wird:
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 });
MBOX‑Dateien schreiben
Die MboxrdStorageWriter Die Klasse bietet die Möglichkeit, neue Nachrichten in die Thunderbird‑Mail‑Speicherdatei zu schreiben. So schreiben Sie Nachrichten:
- Öffnen Sie die Thunderbird‑Speicherdatei in FileStream.
- Erstellen Sie eine Instanz von dem MboxrdStorageWriter Klasse und übergeben Sie den oben genannten Stream dem Konstruktor.
- Bereiten Sie eine neue Nachricht mit dem MailMessage Klasse.
- Rufen Sie die WriteMessage() Methode und übergeben Sie das oben Genannte MailMessage Instanz, um die Nachricht zum Thunderbird‑Speicher hinzuzufügen.
- Alle Streams schließen.
Das folgende Code‑Snippet zeigt, wie Sie Nachrichten in den Thunderbird‑Mail‑Speicher schreiben.
// 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();
MBOX-Speicher aufteilen/Aufteilung abbrechen
Aspose.Email bietet Methoden zum Aufteilen von Mbox-Speicher in kleinere Teile, was die Handhabung großer E-Mail-Archive erleichtert. Je nach verwendeter .NET-Version können die verfügbaren Methoden und deren Parameter variieren. Nachfolgend die Methoden von MboxStorageReader Klasse, die sowohl für .NET Framework 4.5 als auch für .NET Core-Versionen sowie für Versionen unter 4.5 verwendet wird.
Mitglieder für .NET Framework 4.5 und .NET Core-Versionen:
-
SplitInto(long chunkSize, string outputPath, CancellationToken token) - Teilt den Mbox‑Speicher in kleinere Teile basierend auf der angegebenen Chunk‑Größe.
-
Parameter:
- chunkSize: Die ungefähre Größe jedes Teils in Bytes.
- outputPath: Der Ordnerpfad, in dem die Teile erstellt werden.
- token: Ein CancellationToken, das die mögliche Abbruch der Operation ermöglicht.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - Teilt den Mbox‑Speicher in kleinere Teile mit einem angegebenen Dateinamen‑Präfix für jeden Teil.
-
Parameter:
- chunkSize: Die ungefähre Größe jedes Teils in Bytes.
- outputPath: Der Ordnerpfad, in dem die Teile erstellt werden.
- partFileNamePrefix: Das Präfix, das dem Dateinamen jedes Teils hinzugefügt wird.
- token: Ein CancellationToken, das die mögliche Abbruch der Operation ermöglicht.
Mitglieder für .NET Framework-Versionen unter 4.5:
-
SplitInto(long chunkSize, string outputPath) - Teilt den Mbox‑Speicher in kleinere Teile basierend auf der angegebenen Chunk‑Größe.
-
SplitInto(long chunkSize, string outputPath, string partFileNamePrefix) - Teilt den Mbox‑Speicher in kleinere Teile mit einem angegebenen Dateinamen‑Präfix für jeden Teil.
-
Cancel() – Unterbricht einen laufenden Aufteilungs‑Vorgang.
Die folgenden Code‑Beispiele demonstrieren, wie man eine MBOX‑Datei in Teile aufteilt, wobei der Vorgang auf maximal fünf Teile begrenzt wird und ein Abbruch‑Mechanismus verwendet wird:
.NET Framework 4.5 und .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 unter 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();
};