Programování s Thunderbird

Číst zprávy z MBOX

Mozilla Thunderbird je open‑source, multiplatformní e‑mailový klient vyvíjený Mozilla Foundation. Ukládá e‑maily ve vlastní souborové struktuře, spravuje indexy zpráv a podadresáře pomocí proprietárních formátů souborů. Aspose.Email může pracovat se strukturami úložiště Thunderbird. MboxrdStorageReader třída umožňuje vývojářům číst zprávy ze souboru poštovního úložiště Mozilla Thunderbird. Tento článek ukazuje, jak číst zprávy z úložiště e‑mailu Thunderbird:

  1. Otevřete soubor úložiště Thunderbird v FileStream.
  2. Vytvořte instanci MboxrdStorageReader třídy a předáte výše uvedený proud konstruktoru.
  3. Zavolejte ReadNextMessage() pro získání první zprávy.
  4. Použijte stejný ReadNextMessage() ve smyčce while pro načtení všech zpráv.
  5. Uzavřete všechny proudy.

Níže uvedený úryvek kódu ukazuje, jak načíst všechny zprávy z poštovního úložiště 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]);
        }
    }
}

Konfigurovat možnosti načítání při čtení zpráv z MBOX

API Aspose.Email umožňuje následující manipulace se zprávami při jejich čtení ze souboru MBOX:

Převést zprávy z MBOX do PST se zachováním příloh 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() vlastnost – Získává nebo nastavuje možnosti načtení e‑mailu při parsování úložiště Mbox.

Číst zprávy se zachováním příloh 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) metoda – Parametr EmlLoadOptions určuje možnosti při čtení zprávy z úložiště Mbox.

Enumerovat zprávy se zachováním příloh 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) metoda – Specifikuje EmlLoadOptions při čtení zprávy z úložiště Mbox.

Extrahovat zprávy z MBOX podle identifikátorů

Někdy je potřeba extrahovat vybrané zprávy podle identifikátorů. Například vaše aplikace ukládá identifikátory v databázi a při požadavku extrahuje zprávu. To je efektivní způsob, jak se vyhnout průchodu celým úložištěm při každém hledání konkrétní zprávy k extrakci. Pro implementaci této funkce pro soubory MBOX poskytuje Aspose.Email následující metody a třídy:

Níže uvedený ukázkový kód ukazuje, jak extrahovat zprávy z MBOX podle identifikátorů:

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

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

Poznámka: ID zprávy je v rámci úložného souboru jedinečné. ID jsou vytvářeny Aspose.Email a nelze je použít v jiných knihovnách nebo aplikacích třetích stran pro zpracování MBOX.

Filtrování a vyhledávání e‑mailů v souborech MBOX

Aspose.Email pro Java poskytuje možnost filtrovat nebo vyhledávat zprávy v souborech MBOX pomocí dotazu. To umožňuje načíst pouze zprávy, které splňují konkrétní kritéria. Tím můžete zlepšit výkon a použitelnost aplikace při práci s velkými soubory MBOX.

Níže uvedený ukázkový kód demonstruje, jak tuto funkci implementovat realizací následujících metod:

  • enumerateMessages(MailQuery query) - vrátí výčtovou kolekci instancí MailMessage, které odpovídají zadanému dotazu.

  • enumerateMessageInfo(MailQuery query) - vrátí výčtovou kolekci instancí MboxMessageInfo, které odpovídají zadanému dotazu.

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

Stránkované načítání zpráv ze souborů MBOX

Aspose.Email pro Java podporuje stránkované načítání zpráv ze souborů MBOX. Tato funkce umožňuje efektivní zpracování velkých souborů MBOX načítáním zpráv po menších dávkách, což snižuje spotřebu paměti a zvyšuje výkon.

Níže uvedený ukázkový kód demonstruje, jak tuto funkci implementovat realizací následujících metod:

  • enumerateMessages(int startIndex, int count) - získá určený počet instancí MailMessage počínaje daným indexem.

  • enumerateMessageInfo(int startIndex, int count) - získá určený počet instancí MboxMessageInfo počínaje daným indexem.

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

Zápis zpráv

The MboxrdStorageWriter třída poskytuje možnost zapisovat nové zprávy do souboru poštovního úložiště Thunderbird. Pro zápis zpráv:

  1. Otevřete soubor úložiště Thunderbird v FileStream.
  2. Vytvořte instanci MboxrdStorageWriter třídy a předáte výše uvedený proud konstruktoru.
  3. Připravte novou zprávu pomocí MailMessage třída.
  4. Zavolejte WriteMessage() metoda a předat výše uvedené MailMessage instance pro přidání zprávy do úložiště Thunderbird.
  5. Uzavřete všechny proudy.

Níže uvedený úryvek kódu ukazuje, jak zapisovat zprávy do poštovního úložiště 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]);
    }
}

Získání celkového počtu zpráv ze souboru MBox

The MboxrdStorageReader třída poskytuje možnost přečíst počet položek dostupných v souboru MBox. To lze použít při vývoji aplikací, které zobrazují průběh činnosti při zpracování takového souboru.

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

Získat aktuální velikost zprávy

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

Nastavit preferované kódování textu při načítání souborů Mbox

The setPreferredTextEncoding(Charset value) metoda třídy MboxLoadOptions třída získává nebo nastavuje preferované kódování pro zprávy. Vytvořte čtečku pro soubor Mbox s určenými možnostmi načítání a vaše zprávy s kódovaným obsahem budou správně načteny a zpracovány. Níže uvedený ukázkový kód ukazuje, jak tuto funkci implementovat do projektu:

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

Rozdělit úložiště Mbox na menší části

Aspose.Email poskytuje následující komponenty určené k větší kontrole nad zpracováním úložiště Mbox, což vám umožní rozdělit velké soubory na zvládnutelné části a během procesu implementovat vlastní akce:

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) – Varianta předchozí metody, která vám také umožňuje zadat vlastní předponu pro názvy rozdělených souborů Mbox.

MboxStorageReader.setEmlCopyingEventHandler – Událost, která nastane před kopírováním e‑mailu do nového souboru Mbox. Můžete přizpůsobit akce před zpracováním e‑mailů.

MboxStorageReader.setEmlCopiedEventHandler – Událost, která nastane po zkopírování e‑mailu do nového souboru Mbox. Můžete provádět následné zpracování e‑mailů.

MboxStorageReader.setMboxFileCreatedEventHandler – Událost, která nastane, když je vytvořen nový soubor Mbox. Můžete tuto událost zachytit a reagovat na vytvoření souboru.

MboxStorageReader.setMboxFileFilledEventHandler Událost. Tato událost nastane, když je nový Mbox soubor naplněn e‑maily. Můžete reagovat na naplnění souboru e‑maily.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) představuje delegáta pro zpracování událostí, které nastanou po vytvoření nebo zpracování nového souboru úložiště.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) představuje delegáta pro zpracování událostí souvisejících s kopírováním MIME položek, typicky používaného v situacích, kdy je objekt MailMessage kopírován z jednoho úložiště do druhého.

NewStorageEventArgs představuje argumenty použité v událostech, které jsou vyvolány po vytvoření nového souboru úložiště nebo po jeho zpracování.

MimeItemCopyEventArgs představuje argumenty události související s kopírováním objektu MailMessage z jednoho úložiště do druhého, a to před zahájením kopírování nebo po jeho dokončení.

Níže uvedený ukázkový kód demonstruje, jak pracovat se soubory Mbox, zpracovávat události související s těmito soubory a provádět operace jako rozdělení úložiště Mbox na menší části při sledování počtu zpráv a počtu částí:

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