Програмиране с Thunderbird

Прочетете съобщения от MBOX

Mozilla Thunderbird е отворен код, крос‑платформен имейл клиент, разработен от Mozilla Foundation. Той съхранява имейли в собствена файловата структура, управлявайки индекси на съобщения и подпапки чрез проприетарни файлови формати. Aspose.Email може да работи със структури на хранилището на Thunderbird. MboxrdStorageReader класът позволява на разработчиците да четат съобщения от файл за хранилище на поща на Mozilla Thunderbird. Тази статия показва как да прочетете съобщенията от хранилището на Thunderbird:

  1. Отворете файла за хранилището на Thunderbird в FileStream.
  2. Създайте инстанция на MboxrdStorageReader клас и предайте горния поток на конструктора.
  3. Извикайте ReadNextMessage() за да получите първото съобщение.
  4. Използвайте същото ReadNextMessage() в while цикъл, за да прочетете всички съобщения.
  5. Затворете всички потоци.

Следният кодов фрагмент показва как да прочетете всички съобщения от хранилището на поща на 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]);
        }
    }
}

Конфигуриране на опции за зареждане при четене на съобщения от MBOX

Aspose.Email API позволява следните манипулации със съобщения при четене от MBOX файл:

Конвертиране на съобщения от MBOX към PST, запазвайки 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() свойство - Получава или задава опции за зареждане на имейл при парсиране на Mbox съхранение.

Четене на съобщения, запазвайки 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) метод - Параметърът EmlLoadOptions задава опции при четене на съобщение от Mbox съхранение.

Изброяване на съобщения, запазвайки 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) метод - Посочва EmlLoadOptions при четене на съобщение от Mbox съхранение.

Извличане на съобщения от MBOX по идентификатори

Понякога е необходимо да се извлекат избрани съобщения по идентификатори. Например, вашето приложение съхранява идентификатори в база данни и извлича съобщение при поискване. Това е ефективен начин да се избегне обхождане на цялото съхранение всеки път за намиране на конкретно съобщение. За реализиране на тази функция за MBOX файлове, Aspose.Email предоставя следните методи и класове:

Кодовият пример по-долу демонстрира как да извлечете съобщения от MBOX по идентификатори:

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

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

Бележка: Идентификаторът на съобщението е уникален в рамките на файла за съхранение. Идентификаторите се създават от Aspose.Email и не могат да се използват в други библиотеки или приложения за обработка на MBOX.

Филтриране и търсене на имейли в MBOX файлове

Aspose.Email for Java предоставя възможност за филтриране или търсене на съобщения в MBOX файлове чрез заявка. Това позволява извличане само на съобщения, отговарящи на конкретни критерии, като подобрява производителността и удобството на приложението при работа с големи MBOX файлове.

Кодовият пример по-долу демонстрира как да реализирате тази функция чрез следните методи:

  • enumerateMessages(MailQuery query) - връща изброима колекция от MailMessage обекти, които отговарят на зададената заявка.

  • enumerateMessageInfo(MailQuery query) - връща изброима колекция от MboxMessageInfo обекти, които отговарят на зададената заявка.

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

Страницирано извличане на съобщения от MBOX файлове

Aspose.Email for Java поддържа страницирано извличане на съобщения от MBOX файлове. Тази функция позволява ефективна обработка на големи MBOX файлове чрез извличане на съобщения на по‑малки партиди, намалявайки консумацията на памет и подобрявайки производителността.

Кодовият пример по-долу демонстрира как да реализирате тази функция чрез следните методи:

  • enumerateMessages(int startIndex, int count) - извлича определен брой MailMessage обекти, започвайки от зададен индекс.

  • enumerateMessageInfo(int startIndex, int count) - извлича определен брой MboxMessageInfo обекти, започвайки от зададен индекс.

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

Писане на съобщения

Този MboxrdStorageWriter класът предоставя възможност на разработчиците да четат съобщения от файл за хранилище на поща на Mozilla Thunderbird. Тази статия показва как да се прочетат съобщенията от хранилището на Thunderbird:

  1. Отворете файла за хранилището на Thunderbird в FileStream.
  2. Създайте инстанция на MboxrdStorageWriter клас и предайте горния поток на конструктора.
  3. Подгответе ново съобщение, като използвате MailMessage клас.
  4. Извикайте WriteMessage() метод и предайте горното MailMessage инстанция за добавяне на съобщението към хранилището на Thunderbird.
  5. Затворете всички потоци.

Следният кодов фрагмент ви показва как да записва съобщения в хранилището на поща на 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]);
    }
}

Получаване на общия брой съобщения от MBox файл

Този MboxrdStorageReader класът предоставя възможност за четене на броя налични елементи в MBox файл. Това може да се използва за разработване на приложения, показващи напредъка на активността при обработка на такъв файл.

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

Получете текущия размер на съобщението

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

Задайте предпочитано текстово кодиране при зареждане на Mbox файлове

Този setPreferredTextEncoding(Charset value) метод на MboxLoadOptions класът получава или задава предпочитаното кодиране за съобщения. Създайте четач за Mbox файла с указани опции за зареждане и вашите съобщения с кодираното съдържание ще бъдат коректно прочетени и обработени. Следният примерен код показва как да внедрите тази функция в проект:

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

Разделете Mbox съхранението на по‑малки части

Aspose.Email предоставя следните компоненти, проектирани за по‑голям контрол върху обработката на Mbox съхранение, позволяващи ви да разделяте големи файлове на управляеми части и да реализирате персонализирани действия по време на процеса:

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Вариация на предишния метод, този ви позволява също да зададете персонализиран префикс за имената на разделените Mbox файлове.

MboxStorageReader.setEmlCopyingEventHandler Събитие Това събитие се случва преди имейлът да бъде копиран в нов файл Mbox. Можете да персонализирате действията преди обработката на имейлите.

MboxStorageReader.setEmlCopiedEventHandler Събитие Това събитие се случва след копиране на имейл в нов файл Mbox. Можете да извършвате постобработващи действия върху имейлите.

MboxStorageReader.setMboxFileCreatedEventHandler Събитие Това събитие се случва, когато се създаде нов файл Mbox. Можете да обработвате това събитие, за да реагирате на създаването на файла.

MboxStorageReader.setMboxFileFilledEventHandler Събитие Този събитие се задейства, когато нов Mbox файл се напълни с имейли. Можете да отговорите на попълването на файла с имейли.

NewStorageEventHandler(Object sender, NewStorageEventArgs e) представлява делегат за обработка на събития, възникващи след създаване или обработка на нов файл за съхранение.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) представлява делегат за обработка на събития, свързани с копирането на Mime елементи, обикновено се използва в сценарии, където обект MailMessage се копира от едно хранилище в друго.

NewStorageEventArgs представлява аргументи, използвани в събития, които се задействат след създаване на нов файл за съхранение или след неговата обработка.

MimeItemCopyEventArgs представлява аргументи на събитие, свързани с копирането на обект MailMessage от едно хранилище в друго, било то преди започване на копирането или след като завърши.

Следният примерен код демонстрира как да взаимодействате с Mbox файлове, да обработвате събития, свързани с тези файлове, и да извършвате операции като разделяне на Mbox съхранението на по-малки части, като се следи броят на съобщенията и частите.

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