Programmeren met Thunderbird
Berichten lezen uit MBOX
Mozilla Thunderbird is een open‑source, cross‑platform e‑mailclient, ontwikkeld door de Mozilla Foundation. Het slaat e‑mails op in een eigen bestandsstructuur, beheert berichtenindexen en submappen via propriëtaire bestandsformaten. Aspose.Email kan werken met de mailopslagstructuren van Thunderbird. De MboxrdStorageReader klasse stelt ontwikkelaars in staat berichten te lezen uit het mailopslagbestand van Mozilla Thunderbird. Dit artikel toont hoe je de berichten uit de Thunderbird‑mailopslag kunt lezen:
- Open het opslagbestand van Thunderbird in FileStream.
- Maak een instantie van de MboxrdStorageReader klasse en geef de bovenstaande stream door aan de constructor.
- Roep ReadNextMessage() om het eerste bericht te krijgen.
- Gebruik dezelfde ReadNextMessage() in een while‑lus om alle berichten te lezen.
- Sluit alle streams.
Het volgende code‑fragment laat zien hoe je alle berichten uit een Thunderbird‑mailopslag kunt lezen.
//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]);
}
}
}
Laadopties configureren bij het lezen van berichten uit MBOX
Aspose.Email‑API staat de volgende bewerkingen toe op berichten bij het lezen uit een MBOX‑bestand:
Berichten converteren van MBOX naar PST met behoud van TNEF‑bijlagen
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() eigenschap - Haalt de e-maillaadopties op of stelt ze in bij het parseren van een Mbox-opslag.
Berichten lezen met behoud van TNEF‑bijlagen
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 - De EmlLoadOptions‑parameter specificeert opties bij het lezen van een bericht uit Mbox‑opslag.
Berichten enumereren met behoud van TNEF‑bijlagen
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 - Specificeert EmlLoadOptions bij het lezen van een bericht uit Mbox‑opslag.
Berichten uit MBOX extraheren op basis van identifiers
Soms is het nodig om geselecteerde berichten op basis van identifiers te extraheren. Bijvoorbeeld, je applicatie slaat identifiers op in een database en haalt een bericht op verzoek op. Dit is de efficiënte manier om telkens door de volledige opslag te zoeken naar een specifiek bericht om te extraheren. Om deze functionaliteit voor MBOX‑bestanden te implementeren, biedt Aspose.Email de volgende methoden en klassen:
- MboxMessageInfo klasse met de EntryId eigenschap - Haalt de entry‑identifier op.
- enumerateMessageInfo() methode van de MboxStorageReader klasse - Biedt de enumerator, die iteratie over berichten in de opslag ondersteunt.
- extractMessage(String id) methode van de MboxStorageReader klasse - Haalt het bericht op uit MBOX.
Het onderstaande code‑voorbeeld laat zien hoe je berichten uit MBOX kunt extraheren op basis van identifiers:
MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());
for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}
Opmerking: De bericht‑ID is uniek binnen het opslagbestand. ID’s worden aangemaakt door Aspose.Email en kunnen niet worden gebruikt in andere MBOX‑verwerkingsbibliotheken of -applicaties van derden.
E‑mails filteren en zoeken in MBOX‑bestanden
Aspose.Email voor Java biedt de mogelijkheid om berichten in MBOX‑bestanden te filteren of zoeken met een query. Hierdoor kun je alleen de berichten ophalen die aan specifieke criteria voldoen. Op deze manier kun je de prestatie en bruikbaarheid van een applicatie verbeteren bij het werken met grote MBOX‑bestanden.
Het onderstaande code‑voorbeeld toont hoe je deze functie implementeert door de volgende methoden uit te voeren:
-
enumerateMessages(MailQuery query)- retourneert een doorvraagbare verzameling MailMessage‑instanties die overeenkomen met de opgegeven query. -
enumerateMessageInfo(MailQuery query)- retourneert een doorvraagbare verzameling MboxMessageInfo‑instanties die overeenkomen met de opgegeven query.
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());
}
Gepagineerd bericht ophalen uit MBOX‑bestanden
Aspose.Email voor Java ondersteunt paginagehaald van berichten uit MBOX‑bestanden. Deze functie maakt efficiënte verwerking van grote MBOX‑bestanden mogelijk door berichten in kleinere batches op te halen, waardoor het geheugenverbruik daalt en de prestaties verbeteren.
Het onderstaande code‑voorbeeld toont hoe je deze functie implementeert door de volgende methoden uit te voeren:
-
enumerateMessages(int startIndex, int count)- haalt een bepaald aantal MailMessage‑instanties op, beginnend vanaf een opgegeven index. -
enumerateMessageInfo(int startIndex, int count)- haalt een bepaald aantal MboxMessageInfo‑instanties op, beginnend vanaf een opgegeven 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());
}
Berichten schrijven
De MboxrdStorageWriter klasse biedt de mogelijkheid om nieuwe berichten naar het mailopslagbestand van Thunderbird te schrijven. Om berichten te schrijven:
- Open het Thunderbird‑opslagbestand in FileStream.
- Maak een instantie van de MboxrdStorageWriter klasse en geef de bovenstaande stream door aan de constructor.
- Bereid een nieuw bericht voor met de MailMessage klasse.
- Roep de WriteMessage() methode en geef het bovenstaande mee MailMessage instance om het bericht toe te voegen aan de Thunderbird‑opslag.
- Sluit alle streams.
De volgende code‑fragment laat zien hoe je berichten naar de mailopslag van Thunderbird schrijft.
//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]);
}
}
Totaal aantal berichten uit een MBox‑bestand ophalen
De MboxrdStorageReader klasse biedt de mogelijkheid om het aantal items in een MBox‑bestand te lezen. Dit kan worden gebruikt om applicaties te ontwikkelen die de voortgang van de activiteit tonen tijdens het verwerken van zo’n bestand.
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}
Huidige berichtgrootte ophalen
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);
}
}
Stel voorkeurs‑tekstcodering in bij het laden van Mbox‑bestanden
De setPreferredTextEncoding(Charset value) methode van de MboxLoadOptions klasse krijgt of stelt de voorkeurscodering voor berichten in. Maak een reader voor het Mbox‑bestand met opgegeven laadopties en je berichten met de gecodeerde inhoud worden correct gelezen en verwerkt. De volgende code‑voorbeeld laat zien hoe je deze functie in een project implementeert:
MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();
Splits Mbox‑opslag in kleinere delen
Aspose.Email biedt de volgende componenten die ontworpen zijn om meer controle te hebben over de verwerking van Mbox‑opslag, waardoor je grote bestanden kunt splitsen in beheersbare delen en aangepaste acties tijdens het proces kunt uitvoeren:
- MboxStorageReader.SplitInto(long chunkSize, String outputPath) methode - Stelt je in staat om Mbox‑opslag te splitsen in kleinere delen, waardoor het beheer en de verwerking van grote Mbox‑bestanden eenvoudiger wordt.
MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Een variant van de vorige methode; deze laat ook een aangepast voorvoegsel voor de gesplitste Mbox‑bestandsnamen opgeven.
MboxStorageReader.setEmlCopyingEventHandler Event Deze gebeurtenis treedt op voordat een e‑mail wordt gekopieerd naar een nieuw Mbox‑bestand. Je kunt acties aanpassen voordat e‑mails worden verwerkt.
MboxStorageReader.setEmlCopiedEventHandler Event Deze gebeurtenis treedt op nadat een e‑mail naar een nieuw Mbox‑bestand is gekopieerd. Je kunt naverwerkingsacties op e‑mails uitvoeren.
MboxStorageReader.setMboxFileCreatedEventHandler Event Deze gebeurtenis treedt op wanneer een nieuw Mbox‑bestand wordt aangemaakt. Je kunt deze gebeurtenis afhandelen om te reageren op bestandcreatie.
MboxStorageReader.setMboxFileFilledEventHandler Event Deze gebeurtenis treedt op wanneer een nieuw Mbox‑bestand wordt gevuld met e‑mails. Je kunt reageren op het vullen van het bestand met e‑mails.
NewStorageEventHandler(Object sender, NewStorageEventArgs e) vertegenwoordigt een delegate voor het afhandelen van gebeurtenissen die plaatsvinden nadat een nieuw opslagbestand is aangemaakt of verwerkt.
MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) vertegenwoordigt een delegate voor het afhandelen van gebeurtenissen gerelateerd aan het kopiëren van Mime‑items, meestal gebruikt in scenario’s waarbij een MailMessage‑object van de ene opslag naar de andere wordt gekopieerd.
NewStorageEventArgs vertegenwoordigt argumenten die worden gebruikt in gebeurtenissen die worden getriggerd nadat een nieuw opslagbestand is aangemaakt of verwerkt.
MimeItemCopyEventArgs vertegenwoordigt gebeurtenisargumenten die verband houden met het kopiëren van een MailMessage‑object van de ene opslag naar de andere, zowel vóór als na het starten van de kopie.
De onderstaande codevoorbeeld laat zien hoe je met Mbox‑bestanden kunt werken, gebeurtenissen met betrekking tot deze bestanden kunt afhandelen, en bewerkingen kunt uitvoeren zoals het splitsen van de Mbox‑opslag in kleinere delen terwijl je het aantal berichten en delen bijhoudt:
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);