Програмування з Thunderbird

Читання повідомлень з MBOX

Mozilla Thunderbird — це відкритий, крос‑платформений клієнт електронної пошти, розроблений Mozilla Foundation. Він зберігає листи у власній файловій структурі, керуючи індексами повідомлень та підпапками за допомогою пропрієтарних форматів файлів. Aspose.Email може працювати зі структурами сховища пошти Thunderbird. The 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

API Aspose.Email дозволяє наступні маніпуляції з повідомленнями під час їх читання з файлу 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());
}

Запис повідомлень

The MboxrdStorageWriter клас забезпечує можливість запису нових повідомлень у файл сховища пошти 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

The 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

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