Файли зберігання Mbox

У цій статті ми дослідимо формат mbox і надамо вам фрагменти коду, які допоможуть вам почати читати файли mbox. Ви навчитеся аналізувати файли mbox, переглядати та зберігати повідомлення, що містяться в них.

Що таке формат Mbox?

Формат mbox — це широко використовуваний формат файлів для зберігання електронних повідомлень. Він має довгу історію та підтримується кількома популярними клієнтами електронної пошти, включаючи Thunderbird, Apple Mail та багато інших. У форматі mbox кілька повідомлень електронної пошти зберігаються як звичайний текст в одному файлі, що робить його зручним для архівування та транспортування даних електронної пошти.

Існують різні варіації формату mbox, кожна з яких має свої особливості реалізації. Деякі з поширених форматів mbox включають mboxrd, mboxo, mboxcl, mboxcl2. Ці варіації в основному відрізняються способом обробки певних аспектів, таких як розділювачі повідомлень і метадані. Важливо знати про ці відмінності під час роботи з файлами mbox, оскільки вони можуть вплинути на сумісність і аналіз даних електронної пошти.

Давайте детальніше розглянемо кілька поштових клієнтів і те, як вони використовують формат mbox:

  • Thunderbird: Thunderbird — це популярний клієнт електронної пошти з відкритим кодом, який використовує формат mbox для зберігання повідомлень електронної пошти. Він зберігає всі повідомлення папки в одному файлі mbox із розширенням “.mbox”. Thunderbird створює окремі файли mbox для кожної папки в поштовій скриньці користувача, що дозволяє легко керувати та створювати резервні копії даних електронної пошти.

  • Apple Mail: Apple Mail, поштовий клієнт за замовчуванням на пристроях macOS та iOS, також використовує формат mbox. Він зберігає кожну папку поштової скриньки як окремий файл mbox, що спрощує міграцію або передачу даних електронної пошти між установками Apple Mail. Файли Apple Mail mbox зазвичай мають розширення «.mbox» або «.mbox.plist».

  • Eudora: Eudora, популярний клієнт електронної пошти в минулому, використовував формат mbox для зберігання повідомлень електронної пошти. Він використовував дещо змінений формат mbox, відомий як «формат поштової скриньки Eudora». Формат поштової скриньки Eudora включає додаткові функції та метадані, характерні для Eudora, наприклад мітки та прапорці стану.

Це лише кілька прикладів поштових клієнтів, які використовують формат mbox. Розуміння формату mbox і його використання в різних клієнтах електронної пошти є важливим під час програмної роботи з файлами mbox, оскільки це допомагає забезпечити сумісність і точний аналіз даних електронної пошти.

.NET API для читання файлів Mbox

Для роботи з файлами mbox у C# ми будемо використовувати Aspose.Email for .NET. Ця надійна та багатофункціональна бібліотека надає широкий спектр функцій для обробки електронної пошти, включаючи читання файлів mbox, видобування повідомлень і маніпулювання даними електронної пошти. Варто зазначити, що Aspose.Email for .NET забезпечує повну підтримку різних форматів mbox, у тому числі згаданих вище. Це дозволяє безперебійно працювати з файлами mbox з різних поштових клієнтів, незалежно від конкретних деталей реалізації mbox. Щоб скористатися потужністю API, можна завантажити його DLL або встановити його з NuGet за допомогою такої команди:

PM> Install-Package Aspose.Email

Відкриття файлів Mbox

Тепер, коли ми краще розуміємо формат mbox і його використання в різних клієнтах електронної пошти, давайте перейдемо до вивчення функцій і практики роботи з файлами mbox за допомогою Aspose.Email. Щоб розпочати розбір файлу mbox, його потрібно відкрити. Нижче наведено кроки для відкриття файлу mbox.

  • Спочатку ми створюємо екземпляр MboxLoadOptions, щоб указати потрібні параметри для завантаження файлу mbox.

  • Потім ми встановлюємо для LeaveOpen значення false, щоб автоматично закривати файл mbox після читання, і вказуємо Encoding.UTF8 як бажане кодування тексту.

  • Нарешті, ми створюємо екземпляр класу MboxStorageReader, викликаючи статичний метод CreateReader, передаючи ім’я вихідного файлу MBOX та екземпляр MboxLoadOptions.

Ці кроки представлено в такому фрагменті коду:

var mboxLoadOptions = new MboxLoadOptions
{
    LeaveOpen = false,
    PreferredTextEncoding = Encoding.UTF8
};

var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions);

Список повідомлень

Відкривши файл mbox, ми можемо отримати інформацію про збережені повідомлення. Наступні фрагменти коду демонструють два підходи до списку повідомлень із файлу mbox.

Підхід 1: використання методу EnumerateMessageInfo

Метод EnumerateMessageInfo класу MboxStorageReader використовується для перегляду повідомлень і перегляду основної інформації про повідомлення, такої як тема, поля від, до та дата. Він також повертає ідентифікатор повідомлення (ідентифікатор запису), який можна використовувати пізніше для читання всього вмісту повідомлення. Цей підхід має такі характеристики:

  • Продуктивність: цей підхід ефективніший порівняно з другим підходом, оскільки він читає та переглядає лише основну інформацію про повідомлення. Це дозволяє уникнути накладних витрат на розбір і завантаження всього вмісту повідомлення під час ітерації.

  • Ефективність: завдяки отриманню лише необхідної інформації мінімізується споживання пам’яті та час обробки. Це особливо корисно під час роботи з великими файлами mbox, які містять численні повідомлення.

Однак важливо зазначити, що за такого підходу весь вміст повідомлення не завантажується під час початкової ітерації. Замість цього вибираються лише важливі деталі, що дозволяє пришвидшити початкову обробку.

Наведений нижче фрагмент коду демонструє процес ітерації повідомлень за допомогою методу EnumerateMessageInfo та їх отримання інформації.

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var messageInfo in mbox.EnumerateMessageInfo())
    {
        Console.WriteLine(messageInfo.Subject);
        Console.WriteLine(messageInfo.From);
        Console.WriteLine(messageInfo.To);
        Console.WriteLine(messageInfo.Date);
    }
}

Таким чином ми можемо отримати доступ до таких властивостей, як «Тема», «Від», «Кому» та «Дата», щоб відобразити відповідні деталі.

Підхід 2: використання методу EnumerateMessages

Другий спосіб передбачає використання методу EnumerateMessages для безпосереднього перегляду екземплярів MailMessage, що містяться у файлі mbox. Цей підхід читає та завантажує весь вміст повідомлення під час кожної ітерації, забезпечуючи миттєвий доступ до повної інформації електронної пошти. Ось деякі ключові аспекти цього підходу:

  • Повнота: на відміну від першого підходу, цей метод дозволяє отримати доступ і обробити весь вміст повідомлення, включаючи тіло, вкладення, заголовки та інші частини. Він забезпечує комплексний доступ до повних даних електронної пошти під час ітерації.

  • Зручність: цей підхід корисний, коли ви хочете виконати операції над усім повідомленням, наприклад зберегти кожне повідомлення в окремих файлах (як показано в прикладі). Це спрощує процес, завантажуючи весь вміст повідомлення в кожній ітерації, дозволяючи виконувати потрібні операції без необхідності подальшого пошуку.

Однак важливо враховувати, що завантаження всього вмісту повідомлення під час кожної ітерації може вплинути на продуктивність, особливо під час роботи з великими файлами mbox або значною кількістю повідомлень. Додатковий час обробки, необхідний для завантаження повного вмісту повідомлення, може бути компромісом, який слід враховувати під час вибору між двома підходами.

Наведений нижче фрагмент коду демонструє процес проходження повідомлень за допомогою методу EnumerateMessages і отримання всього вмісту повідомлення.

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var eml in mbox.EnumerateMessages())
    {
        eml.Save($@"{eml.Subject}.eml");
    }
}

Таким чином ми можемо виконувати різні операції з кожним повідомленням, наприклад зберігати їх в окремі файли .eml, як показано в прикладі.

Зрештою, вибір між цими підходами залежить від конкретного випадку використання та вимог. Якщо вам потрібно швидко отримати доступ до основної інформації про повідомлення та виконати подальші операції з окремими повідомленнями, перший підхід пропонує кращу продуктивність. З іншого боку, якщо вам потрібен негайний доступ до повного вмісту повідомлення та ви бажаєте виконувати операції з усіма повідомленнями одночасно, другий підхід забезпечує зручність за рахунок дещо нижчої продуктивності.

Важливо оцінити ваші конкретні потреби та врахувати такі фактори, як розмір файлу mbox, кількість повідомлень і операції, які ви збираєтеся виконати, вирішуючи, який підхід більше підходить для вашого сценарію.

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

У попередньому розділі ми обговорили, як створити список повідомлень. Тепер давайте дослідимо, як ми можемо читати окремі повідомлення, використовуючи їхній ідентифікатор рядка, який можна отримати з першого підходу перерахування MessageInfo.

Під час використання методу EnumerateMessageInfo для створення списку повідомлень кожне повідомлення пов’язується з унікальним ідентифікатором в одному файлі mbox. Цей ідентифікатор, зазвичай представлений у вигляді рядка, можна отримати з властивості EntryId об’єкта MboxMessageInfo.

Отримавши ідентифікатор повідомлення, ми можемо використовувати його для перегляду повного вмісту повідомлення, виконавши такі дії:

  • Ми створюємо екземпляр EmlLoadOptions, щоб указати бажані параметри для завантаження вилучених повідомлень.
  • Ми дозволяємо зберігати вбудований формат повідомлень і вкладення TNEF.
  • Усередині циклу foreach ми отримуємо доступ до властивості EntryId кожного об’єкта MboxMessageInfo, який представляє унікальний ідентифікатор відповідного повідомлення.
  • Потім ми використовуємо цей ідентифікатор разом із методом ExtractMessage класу MboxStorageReader, щоб отримати повне повідомлення як об’єкт MailMessage.
  • Нарешті, ми можемо виконати будь-які потрібні операції з повідомленням, наприклад зберегти його в окремому файлі .eml.

Наведений нижче фрагмент коду демонструє, як читати окреме повідомлення за допомогою його рядкового ідентифікатора:

var emlLoadOptions = new EmlLoadOptions
{
    PreserveEmbeddedMessageFormat = true,
    PreserveTnefAttachments = true
};

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var messageInfo in mbox.EnumerateMessageInfo())
    {
        var eml = mbox.ExtractMessage(messageInfo.EntryId, emlLoadOptions);
        eml.Save($@"{eml.Subject}.eml");
    }
}

Використовуючи ідентифікатор повідомлення, отриманий у результаті першого підходу перерахування MessageInfo, ми можемо ефективно читати окремі повідомлення відповідно до наших конкретних вимог.

Варто зазначити, що такий підхід дозволяє вибірково читати та обробляти цікаві повідомлення, пропускаючи інші. Ця гнучкість особливо цінна під час роботи з великими файлами mbox, які містять значну кількість повідомлень, оскільки вона мінімізує непотрібну обробку та покращує загальну ефективність.

Майте на увазі, що ідентифікатор повідомлення є унікальним у межах одного файлу mbox. Якщо вам потрібно працювати з повідомленнями в кількох файлах mbox, вам потрібно підтримувати зіставлення між ідентифікаторами та їхніми відповідними файлами.

Завдяки можливості читати окремі повідомлення за допомогою їхнього унікального рядкового ідентифікатора ви маєте більший контроль і гнучкість в обробці файлів mbox і можете ефективно витягувати та маніпулювати потрібним вмістом електронної пошти.

Функції утиліти

Бібліотека Aspose.Email пропонує кілька корисних функцій, які можуть бути корисними під час роботи з файлами mbox. Ось кілька прикладів:

Отримайте загальну кількість елементів, збережених у mbox

Ми можемо легко переглянути загальну кількість елементів, що зберігаються у файлі mbox, за допомогою методу GetTotalItemsCount. Це може бути корисним для відстеження розміру колекції електронних листів. Для цього використовуйте наведений нижче фрагмент коду.

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    var itemsCount = mbox.GetTotalItemsCount();
}

Отримайте зчитування розміру даних за одну ітерацію

Отримавши доступ до властивості CurrentDataSize під час ітерації, ми можемо отримати розмір даних, які були зчитані за одну ітерацію. Це може бути цінною інформацією для оптимізації продуктивності або відстеження прогресу. Щоб досягти цього, використовуйте такий фрагмент коду:

using (var mbox = MboxStorageReader.CreateReader(fileName, mboxLoadOptions))
{
    foreach (var messageInfo in mbox.EnumerateMessageInfo())
    {
        var messageSize = mbox.CurrentDataSize;
    }
}

Висновок

У цій статті ми досліджували формат mbox і представили бібліотеку Aspose.Email for .NET як потужний інструмент для роботи з файлами mbox у проектах C#. Ми розповіли, як відкривати файли mbox, аналізувати та переглядати повідомлення, а також продемонстрували деякі функції утиліти. Озброївшись цими знаннями та наданими фрагментами коду, тепер ви можете легко працювати з файлами mbox у програмуванні. Ви можете дослідити інші функції Aspose.Email за допомогою документації. Також ви можете опублікувати свої запити на нашому форумі.

Дивись також