Programmare con Thunderbird

Leggi messaggi da MBOX

Mozilla Thunderbird è un client di posta open-source e cross-platform, sviluppato dalla Mozilla Foundation. Memorizza le email nella sua struttura di file, gestendo indici dei messaggi e sottocartelle tramite formati di file proprietari. Aspose.Email può lavorare con le strutture di storage di posta di Thunderbird. Il MboxrdStorageReader la classe consente agli sviluppatori di leggere i messaggi dal file di storage di posta di Mozilla Thunderbird. Questo articolo mostra come leggere i messaggi dallo storage email di Thunderbird:

  1. Apri il file di storage di Thunderbird in FileStream.
  2. Crea un’istanza di MboxrdStorageReader classe e passa il flusso sopra al costruttore.
  3. Chiama ReadNextMessage() per ottenere il primo messaggio.
  4. Usa lo stesso ReadNextMessage() in un ciclo while per leggere tutti i messaggi.
  5. Chiudi tutti i flussi.

Il seguente frammento di codice mostra come leggere tutti i messaggi da uno storage di posta Thunderbird.

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

Configura le opzioni di caricamento durante la lettura dei messaggi da MBOX

L’API Aspose.Email consente le seguenti manipolazioni dei messaggi durante la lettura da un file MBOX:

Converti messaggi da MBOX a PST preservando gli allegati TNEF

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() proprietà - Ottiene o imposta le opzioni di caricamento email durante il parsing di uno storage Mbox.

Leggi i messaggi preservando gli allegati TNEF

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) metodo - Il parametro EmlLoadOptions specifica le opzioni durante la lettura di un messaggio dallo storage Mbox.

Enumera i messaggi preservando gli allegati TNEF

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

MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) metodo - Specifica EmlLoadOptions durante la lettura di un messaggio dallo storage Mbox.

Estrai messaggi da MBOX per identificatori

A volte è necessario estrarre messaggi selezionati per identificatore. Ad esempio, la tua applicazione memorizza gli identificatori in un database ed estrae un messaggio su richiesta. Questo è il modo più efficiente per evitare di attraversare l’intero storage ogni volta per trovare un messaggio specifico da estrarre. Per implementare questa funzionalità per file MBOX, Aspose.Email fornisce i seguenti metodi e classi:

Il seguente esempio di codice dimostra come estrarre messaggi da MBOX per identificatore:

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

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

Nota: L’ID del messaggio è unico all’interno del file di storage. Gli ID sono creati da Aspose.Email e non possono essere usati in altre librerie o applicazioni di terze parti per l’elaborazione di MBOX.

Filtra e ricerca email in file MBOX

Aspose.Email per Java offre la possibilità di filtrare o cercare messaggi all’interno di file MBOX usando una query. Questo consente di recuperare solo i messaggi che corrispondono a criteri specifici. In questo modo, è possibile migliorare le prestazioni e la usabilità di un’applicazione quando si lavora con file MBOX di grandi dimensioni.

Il seguente esempio di codice dimostra come implementare questa funzionalità realizzando i seguenti metodi:

  • enumerateMessages(MailQuery query) - restituisce una collezione enumerabile di istanze MailMessage che corrispondono alla query specificata.

  • enumerateMessageInfo(MailQuery query) - restituisce una collezione enumerabile di istanze MboxMessageInfo che corrispondono alla query specificata.

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

Recupero paginato dei messaggi da file MBOX

Aspose.Email per Java supporta il recupero paginato dei messaggi da file MBOX. Questa funzionalità consente un’elaborazione efficiente di grandi file MBOX recuperando i messaggi in lotti più piccoli, riducendo il consumo di memoria e migliorando le prestazioni.

Il seguente esempio di codice dimostra come implementare questa funzionalità realizzando i seguenti metodi:

  • enumerateMessages(int startIndex, int count) - recupera un numero specificato di istanze MailMessage a partire da un indice dato.

  • enumerateMessageInfo(int startIndex, int count) - recupera un numero specificato di istanze MboxMessageInfo a partire da un indice dato.

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

Scrittura dei messaggi

Il MboxrdStorageWriter la classe fornisce la funzionalità di scrivere nuovi messaggi nel file di storage di posta di Thunderbird. Per scrivere i messaggi:

  1. Apri il file di storage di Thunderbird in FileStream.
  2. Crea un’istanza di MboxrdStorageWriter classe e passa il flusso sopra al costruttore.
  3. Prepara un nuovo messaggio usando il MailMessage classe.
  4. Chiama il WriteMessage() metodo e passare quanto sopra MailMessage istanza per aggiungere il messaggio allo storage di Thunderbird.
  5. Chiudi tutti i flussi.

Il seguente frammento di codice mostra come scrivere messaggi nello storage di posta di Thunderbird.

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

Ottenere il numero totale di messaggi da un file MBox

Il MboxrdStorageReader la classe fornisce la capacità di leggere il numero di elementi disponibili in un file MBox. Questo può essere usato per sviluppare applicazioni che mostrano l’avanzamento dell’attività durante l’elaborazione di tale file.

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

Ottieni la dimensione corrente del messaggio

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

Imposta la codifica testo preferita durante il caricamento dei file Mbox

Il setPreferredTextEncoding(Charset value) metodo del MboxLoadOptions la classe ottiene o imposta la codifica preferita per i messaggi. Crea un lettore per il file Mbox con le opzioni di caricamento specificate e i tuoi messaggi con il contenuto codificato verranno letti e elaborati correttamente. Il seguente esempio di codice mostra come implementare questa funzionalità in un progetto:

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

Dividi l’archivio Mbox in parti più piccole

Aspose.Email fornisce i seguenti componenti progettati per avere un maggiore controllo sull’elaborazione dell’archivio Mbox, consentendo di suddividere file di grandi dimensioni in parti gestibili e di implementare azioni personalizzate durante il processo:

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Una variante del metodo precedente, questa consente anche di specificare un prefisso personalizzato per i nomi dei file Mbox suddivisi.

MboxStorageReader.setEmlCopyingEventHandler Evento Questo evento si verifica prima che un’email venga copiata in un nuovo file Mbox. È possibile personalizzare le azioni prima che le email vengano elaborate.

MboxStorageReader.setEmlCopiedEventHandler Evento Questo evento si verifica dopo che un’email è stata copiata in un nuovo file Mbox. È possibile eseguire azioni di post-elaborazione sulle email.

MboxStorageReader.setMboxFileCreatedEventHandler Evento Questo evento si verifica quando viene creato un nuovo file Mbox. È possibile gestire questo evento per reagire alla creazione del file.

MboxStorageReader.setMboxFileFilledEventHandler Evento Questo evento si verifica quando un nuovo file Mbox viene riempito di email. Puoi rispondere al popolamento del file con le email.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) Rappresenta un delegato per gestire gli eventi che si verificano dopo la creazione o l’elaborazione di un nuovo file di archiviazione.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) Rappresenta un delegato per gestire gli eventi relativi alla copia di elementi Mime, tipicamente usato in scenari in cui un oggetto MailMessage è copiato da una struttura di archiviazione a un’altra.

NewStorageEventArgs Rappresenta gli argomenti utilizzati negli eventi che vengono sollevati dopo la creazione di un nuovo file di archiviazione o dopo che è stato processato.

MimeItemCopyEventArgs Rappresenta gli argomenti dell’evento relativi alla copia di un oggetto MailMessage da una struttura di archiviazione all’altra, sia prima dell’inizio della copia sia dopo il completamento.

Il campione di codice qui sotto dimostra come interagire con i file Mbox, gestire gli eventi correlati a questi file e eseguire operazioni come suddividere l’archivio Mbox in parti più piccole mantenendo il conteggio dei messaggi e delle parti:

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