Programmering med Thunderbird

Läs meddelanden från MBOX

Mozilla Thunderbird är en öppen källkod, plattformsoberoende e‑postklient, utvecklad av Mozilla Foundation. Den lagrar e‑post i sin egen filsstruktur, hanterar meddelandeindex och undermappar via proprietära filformat. Aspose.Email kan arbeta med Thunderbirds lagringsstrukturer. MboxrdStorageReader klassen låter utvecklare läsa meddelanden från Mozilla Thunderbirds lagringsfil för e‑post. Denna artikel visar hur man läser meddelandena från Thunderbirds 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.

//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]);
        }
    }
}

Konfigurera läsalternativ när meddelanden läses från MBOX

Aspose.Email‑API möjliggör följande manipulationer av meddelanden när de läses från en MBOX‑fil:

Konvertera meddelanden från MBOX till PST och bevara TNEF‑bilagor

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() egenskap - Hämtar eller sätter e-postladdningsalternativ när ett Mbox-lager analyseras.

Läs meddelanden och bevara TNEF‑bilagor

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) metod – EmlLoadOptions‑parametern specificerar alternativ när ett meddelande läses från Mbox‑lagring.

Enumerera meddelanden och bevara TNEF‑bilagor

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
    // do something
}

MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) metod – Anger EmlLoadOptions när ett meddelande läses från Mbox‑lagring.

Extrahera meddelanden från MBOX med identifierare

Ibland krävs det att extrahera utvalda meddelanden med identifierare. Till exempel lagrar din applikation identifierare i en databas och extraherar ett meddelande på begäran. Detta är ett effektivt sätt att undvika att gå igenom hela lagringen varje gång för att hitta ett specifikt meddelande att extrahera. För att implementera denna funktion för MBOX‑filer tillhandahåller Aspose.Email följande metoder och klasser:

Kodexemplet nedan visar hur man extraherar meddelanden från MBOX med identifierare:

MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());

for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
    MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}

Obs: Meddelande‑ID är unikt inom lagringsfilen. ID:n skapas av Aspose.Email och kan inte användas i andra tredjeparts‑MBOX‑bearbetningsbibliotek eller -appar.

Filtrera och sök e‑post i MBOX‑filer

Aspose.Email för Java ger möjlighet att filtrera eller söka meddelanden i MBOX‑filer med en fråga. Detta möjliggör att endast hämta de meddelanden som uppfyller specifika kriterier. På så sätt kan du förbättra en applikations prestanda och användbarhet när du arbetar med stora MBOX‑filer.

Kodexemplet nedan demonstrerar hur du implementerar denna funktion genom att realisera följande metoder:

  • enumerateMessages(MailQuery query) - returnerar en enumererbar samling av MailMessage‑instanser som matchar den angivna frågan.

  • enumerateMessageInfo(MailQuery query) - returnerar en enumererbar samling av MboxMessageInfo‑instanser som matchar den angivna frågan.

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

Paginerad meddelandehämtning från MBOX‑filer

Aspose.Email för Java stödjer paginerad hämtning av meddelanden från MBOX‑filer. Denna funktion möjliggör effektiv bearbetning av stora MBOX‑filer genom att hämta meddelanden i mindre batchar, vilket minskar minnesanvändningen och förbättrar prestandan.

Kodexemplet nedan demonstrerar hur du implementerar denna funktion genom att realisera följande metoder:

  • enumerateMessages(int startIndex, int count) - hämtar ett angivet antal MailMessage‑instanser med start från ett givet index.

  • enumerateMessageInfo(int startIndex, int count) - hämtar ett angivet antal MboxMessageInfo‑instanser med start från ett givet 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());
}

Skriva meddelanden

Den MboxrdStorageWriter klassen ger möjlighet att skriva nya meddelanden till Thunderbirds lagringsfil för e‑post. För att skriva meddelanden:

  1. Öppna Thunderbirds lagringsfil i FileStream.
  2. Skapa en instans av MboxrdStorageWriter klassen och skicka den ovanstående strömmen till konstruktorn.
  3. Förbered ett nytt meddelande med hjälp av MailMessage klass.
  4. Anropa WriteMessage() metod och skicka ovanstående MailMessage instans för att lägga till meddelandet i Thunderbirds lagring.
  5. Stäng alla strömmar.

Följande kodsnutt visar hur du skriver meddelanden till Thunderbirds e‑postlagring.

//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]);
    }
}

Hämta totalt antal meddelanden från MBox‑fil

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.

MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
    System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}

Hämta aktuell meddelandestorlek

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

Ställ in föredragen textkodning när Mbox‑filer läses

Den setPreferredTextEncoding(Charset value) metod för MboxLoadOptions klassen får eller sätter föredragen kodning för meddelanden. Skapa en läsare för Mbox‑filen med angivna läsalternativ så kommer dina meddelanden med den kodade innehållet att läsas och bearbetas korrekt. Följande kodexempel visar hur du implementerar denna funktion i ett projekt:

MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();

Dela Mbox‑lagring i mindre delar

Aspose.Email tillhandahåller följande komponenter som är utformade för att ge mer kontroll över bearbetning av Mbox‑lagring, så att du kan dela stora filer i hanterbara delar och implementera anpassade åtgärder under processen:

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) En variant av den föregående metoden, denna låter dig också ange ett eget prefix för de delade Mbox‑filnamnen.

MboxStorageReader.setEmlCopyingEventHandler‑händelse Denna händelse inträffar innan ett e‑postmeddelande kopieras till en ny Mbox‑fil. Du kan anpassa åtgärder innan e‑postmeddelanden bearbetas.

MboxStorageReader.setEmlCopiedEventHandler‑händelse Denna händelse inträffar efter att ett e‑postmeddelande har kopierats till en ny Mbox‑fil. Du kan utföra efterbehandlingsåtgärder på e‑postmeddelanden.

MboxStorageReader.setMboxFileCreatedEventHandler‑händelse Denna händelse inträffar när en ny Mbox‑fil skapas. Du kan hantera denna händelse för att reagera på filskapandet.

MboxStorageReader.setMboxFileFilledEventHandler‑händelse. Denna händelse inträffar när en ny Mbox‑fil fylls med e‑post. Du kan svara på att filen har fyllts med e‑post.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) representerar en delegat för att hantera händelser som inträffar efter att en ny lagringsfil har skapats eller bearbetats.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) representerar en delegat för att hantera händelser relaterade till kopiering av Mime‑poster, vanligtvis använt i scenarier där ett MailMessage‑objekt kopieras från en lagring till en annan.

NewStorageEventArgs representerar argument som används i händelser som utlöses efter att en ny lagringsfil har skapats eller efter att den har bearbetats.

MimeItemCopyEventArgs representerar händelseargument som rör kopiering av ett MailMessage‑objekt från en lagring till en annan, antingen innan kopieringen påbörjas eller efter att den är slutförd.

Kodexemplet nedan visar hur man interagerar med Mbox‑filer, hanterar händelser relaterade till dessa filer och utför operationer som att dela upp Mbox‑lagringen i mindre delar samtidigt som man håller reda på antalet meddelanden och antal delar:

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