Programmieren mit Thunderbird
Nachrichten aus MBOX 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 Klasse ermöglicht Entwicklern das Lesen von Nachrichten aus der Mail‑Speicherdatei von Mozilla Thunderbird. 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.
//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
MailMessage msg;
String[] fromMarker = {null};
while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
System.out.println(fromMarker[0]);
}
}
}
Ladeoptionen beim Lesen von Nachrichten aus MBOX konfigurieren
Aspose.Email API ermöglicht die folgenden Manipulationen von Nachrichten beim Lesen aus einer MBOX‑Datei:
Nachrichten von MBOX nach PST mit Erhalt von TNEF‑Anhängen konvertieren
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");
MailStorageConverter.MboxMessageOptions() Eigenschaft - Ruft E-Mail-Ladeoptionen ab oder setzt sie beim Parsen eines Mbox-Speichers.
Nachrichten mit Erhalt von TNEF‑Anhängen lesen
MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);
MboxrdStorageReader.readNextMessage(EmlLoadOptions options) Methode – Der Parameter EmlLoadOptions gibt Optionen beim Lesen einer Nachricht aus dem Mbox‑Speicher an.
Nachrichten mit Erhalt von TNEF‑Anhängen auflisten
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
// do something
}
MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) Methode – Gibt EmlLoadOptions beim Lesen einer Nachricht aus dem Mbox‑Speicher an.
Nachrichten aus MBOX anhand von Kennungen extrahieren
Manchmal ist es erforderlich, ausgewählte Nachrichten anhand von Kennungen zu extrahieren. Zum Beispiel speichert Ihre Anwendung Kennungen in einer Datenbank und extrahiert bei Bedarf eine Nachricht. Dies ist ein effizientes Verfahren, um jedes Mal das gesamte Speicherverzeichnis zu durchlaufen, um eine bestimmte zu extrahierende Nachricht zu finden. Um diese Funktion für MBOX‑Dateien zu implementieren, stellt Aspose.Email die folgenden Methoden und Klassen bereit:
- MboxMessageInfo Klasse mit dem EntryId Eigenschaft – Ruft die Eintrags‑ID ab.
- enumerateMessageInfo() Methode des MboxStorageReader Klasse – Gibt den Enumerator frei, der das Durchlaufen von Nachrichten im Speicher unterstützt.
- extractMessage(String id) Methode des MboxStorageReader Klasse – Ruft die Nachricht aus MBOX ab.
Das untenstehende Codebeispiel zeigt, wie Nachrichten aus MBOX anhand von Kennungen extrahiert werden:
MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());
for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}
Hinweis: Die Nachrichten‑ID ist innerhalb der Speicherdatei eindeutig. IDs werden von Aspose.Email erstellt und können nicht in anderen Drittanbieter‑MBOX‑Verarbeitungs‑Bibliotheken oder -Apps verwendet werden.
E‑Mails in MBOX‑Dateien filtern und suchen
Aspose.Email für Java bietet die Möglichkeit, Nachrichten in MBOX‑Dateien anhand einer Abfrage zu filtern oder zu suchen. Dadurch können nur die Nachrichten abgerufen werden, die bestimmte Kriterien erfüllen. Auf diese Weise lässt sich die Anwendungsleistung und Benutzerfreundlichkeit beim Arbeiten mit großen MBOX‑Dateien verbessern.
Das untenstehende Codebeispiel demonstriert, wie diese Funktion umgesetzt wird, indem die folgenden Methoden verwendet werden:
-
enumerateMessages(MailQuery query)- gibt eine aufzählbare Sammlung von MailMessage‑Instanzen zurück, die der angegebenen Abfrage entsprechen. -
enumerateMessageInfo(MailQuery query)- gibt eine aufzählbare Sammlung von MboxMessageInfo‑Instanzen zurück, die der angegebenen Abfrage entsprechen.
MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());
for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
System.out.println("Subject: " + message.getSubject());
}
Paginierter Nachrichtenabruf aus MBOX‑Dateien
Aspose.Email für Java unterstützt die paginierte Abrufung von Nachrichten aus MBOX‑Dateien. Diese Funktion ermöglicht eine effiziente Verarbeitung großer MBOX‑Dateien, indem Nachrichten in kleineren Stapeln abgerufen werden, was den Speicherverbrauch reduziert und die Leistung verbessert.
Das untenstehende Codebeispiel demonstriert, wie diese Funktion umgesetzt wird, indem die folgenden Methoden verwendet werden:
-
enumerateMessages(int startIndex, int count)- ruft eine angegebene Anzahl von MailMessage‑Instanzen ab, beginnend bei einem bestimmten Index. -
enumerateMessageInfo(int startIndex, int count)- ruft eine angegebene Anzahl von MboxMessageInfo‑Instanzen ab, beginnend bei einem bestimmten Index.
MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10
for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
System.out.println("Subject: " + message.getSubject());
}
Nachrichten schreiben
Die MboxrdStorageWriter Klasse bietet die Möglichkeit, neue Nachrichten in die Mail‑Speicherdatei von Thunderbird 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 Nachrichten in den Mail‑Speicher von Thunderbird geschrieben werden.
//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
MailMessage msg = MailMessage.load(dataDir + "Message.msg");
String[] fromMarker = {null};
writer.writeMessage(msg, fromMarker);
System.out.println(fromMarker[0]);
}
}
Gesamtzahl der Nachrichten aus MBox‑Datei 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.
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}
Aktuelle Nachrichtengröße abrufen
FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
MailMessage msg = null;
while ((msg = reader.readNextMessage()) != null) {
//returns the number of bytes read
long currentDataSize = reader.getCurrentDataSize();
System.out.println("Bytes read: " + currentDataSize);
}
}
Bevorzugte Textkodierung beim Laden von Mbox‑Dateien festlegen
Die setPreferredTextEncoding(Charset value) Methode des MboxLoadOptions Klasse liest oder setzt die bevorzugte Kodierung für Nachrichten. Erstellen Sie einen Reader für die Mbox-Datei mit angegebenen Ladeoptionen und Ihre Nachrichten mit dem codierten Inhalt werden korrekt gelesen und verarbeitet. Das folgende Codebeispiel zeigt, wie Sie diese Funktion in ein Projekt implementieren:
MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();
Mbox‑Speicher in kleinere Teile aufteilen
Aspose.Email bietet die folgenden Komponenten, die Ihnen mehr Kontrolle über die Verarbeitung von Mbox‑Speichern ermöglichen, große Dateien in handhabbare Teile zu splitten und benutzerdefinierte Aktionen während des Prozesses zu implementieren:
- MboxStorageReader.SplitInto(long chunkSize, String outputPath) Methode – Ermöglicht das Aufteilen des Mbox‑Speichers in kleinere Teile, wodurch große Mbox‑Dateien einfacher verwaltet und verarbeitet werden können.
MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Eine Variante der vorherigen Methode, die es Ihnen zudem ermöglicht, ein benutzerdefiniertes Präfix für die geteilten Mbox-Dateinamen anzugeben.
MboxStorageReader.setEmlCopyingEventHandler Ereignis Dieses Ereignis tritt auf, bevor eine E‑Mail in eine neue Mbox-Datei kopiert wird. Sie können Aktionen anpassen, bevor E‑Mails verarbeitet werden.
MboxStorageReader.setEmlCopiedEventHandler Ereignis Dieses Ereignis tritt auf, nachdem eine E‑Mail in eine neue Mbox-Datei kopiert wurde. Sie können Nachbearbeitungsaktionen auf E‑Mails ausführen.
MboxStorageReader.setMboxFileCreatedEventHandler Ereignis Dieses Ereignis tritt auf, wenn eine neue Mbox-Datei erstellt wird. Sie können dieses Ereignis behandeln, um auf die Dateierstellung zu reagieren.
MboxStorageReader.setMboxFileFilledEventHandler Ereignis Dieses Ereignis tritt auf, wenn eine neue Mbox‑Datei mit E‑Mails gefüllt wird. Sie können auf das Befüllen der Datei mit E‑Mails reagieren.
NewStorageEventHandler(Object sender, NewStorageEventArgs e) stellt einen Delegaten zur Behandlung von Ereignissen dar, die nach dem Erstellen oder Verarbeiten einer neuen Speicherdatei auftreten.
MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) stellt einen Delegaten zur Behandlung von Ereignissen im Zusammenhang mit dem Kopieren von Mime‑Elementen dar, typischerweise verwendet in Szenarien, in denen ein MailMessage‑Objekt von einem Speicherort zu einem anderen kopiert wird.
NewStorageEventArgs stellt Argumente dar, die in Ereignissen verwendet werden, die nach dem Erstellen einer neuen Speicherdatei oder nach deren Verarbeitung ausgelöst werden.
MimeItemCopyEventArgs stellt Ereignisargumente dar, die sich auf das Kopieren eines MailMessage‑Objekts von einem Speicherort zu einem anderen beziehen, entweder bevor das Kopieren beginnt oder nachdem es abgeschlossen ist.
Das folgende Codebeispiel zeigt, wie man mit Mbox‑Dateien interagiert, Ereignisse, die diese Dateien betreffen, verarbeitet und Vorgänge wie das Aufteilen des Mbox‑Speichers in kleinere Teile ausführt, wobei die Nachrichten‑ und Teilanzahl verfolgt werden:
messageCount = 0;
partCount = 0;
// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);
// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
public void invoke(Object sender, NewStorageEventArgs e) {
System.out.println("New Mbox file created: " + e.getFileName());
partCount++;
}
});
mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
public void invoke(Object sender, NewStorageEventArgs e) {
System.out.println("Mbox file filled with messages: " + e.getFileName());
}
});
mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
public void invoke(Object sender, MimeItemCopyEventArgs e) {
System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
messageCount++;
}
});
// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");
// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);