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

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

Про формат Mbox

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

Найпопулярніші поштові клієнти, сумісні з цим форматом:

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

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

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

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

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

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

З нашою бібліотекою Aspose.Email for Python легко працювати з файлами mbox у Python. Цей надійний і багатофункціональний API, який пропонує великий набір функцій для обробки електронної пошти, як-от можливість читати файли mbox, видобувати повідомлення та маніпулювати даними електронної пошти.

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

> pip install Aspose.Email-for-Python-via-NET

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

Щоб почати працювати з файлом у форматі mbox, його потрібно спочатку відкрити. У цьому нам допоможе бібліотека Aspose.Email.

У нашому коді ми виконаємо кроки, описані нижче:

  • Код починається з імпорту необхідних модулів із бібліотеки Aspose.Email: класів MboxStorageReader і MboxLoadOptions.

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

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

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

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

mbox_reader = MboxStorageReader.create_reader(file_name, mbox_load_options)

Список повідомлень із файлу Mbox

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

Підхід 1: метод EnumerateMessageInfo

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

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

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

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

  • Імпортуйте необхідні модулі з бібліотеки Aspose.Email: класи MboxStorageReader і MboxLoadOptions.

  • Створіть екземпляр класу MboxLoadOptions. Цей об’єкт містить різні параметри для завантаження файлу.

  • Налаштуйте властивості об’єкта:

    • Установіть для leaveopen значення False, якщо ви хочете закрити файл після його прочитання.
    • Встановіть preferredtextencoding на ‘utf-8’, щоб указати бажане кодування тексту для вмісту повідомлення.
  • Відкрийте файл за допомогою методу MboxStorageReader.createreader() класу MboxStorageReader.

  • Перебирайте кожне повідомлення у файлі за допомогою методу enumeratemessageinfo() об’єкта mboxreader, витягуючи певні деталі з кожного повідомлення. У нашому прикладі це тема, адреса, кому та дата.

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        print(message_info.subject)
        print(message_info.from_address)
        print(message_info.to)
        print(message_info.date)

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

Підхід 2: метод EnumerateMessages

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

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

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

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for eml in mbox_reader.enumerate_messages():
        eml.save(f"{eml.subject}.eml")

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

Читання повідомлень у файлах Mbox

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

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

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

  • Ми створюємо екземпляр EmlLoadOptions. Цей об’єкт містить різні параметри для завантаження файлів EML.
  • Налаштуйте властивості:
    • Установіть для SaveEmbeddedmessageformat значення True, якщо ви хочете зберегти вбудований формат повідомлення у файлі EML.
    • Установіть для Savetnefattachments значення True, якщо ви хочете зберегти вкладення TNEF у файлі EML.
  • Створіть екземпляр MboxLoadOptions. Цей об’єкт містить різні параметри для завантаження файлу mbox.
  • Налаштуйте властивості mboxloadoptions:
    • Установіть для leaveopen значення False, якщо ви хочете закрити файл після його прочитання.
    • Встановіть preferredtextencoding на ‘utf-8’, щоб указати бажане кодування тексту для вмісту повідомлення.
  • Відкрийте файл за допомогою методу MboxStorageReader.createreader().
  • Усередині циклу foreach ми отримуємо доступ до властивості EntryId кожного об’єкта MboxMessageInfo, який представляє унікальний ідентифікатор відповідного повідомлення.
  • Потім ми використовуємо цей ідентифікатор разом із методом ExtractMessage класу MboxStorageReader, щоб отримати повне повідомлення як об’єкт MailMessage.
  • Нарешті, ми можемо виконати будь-які потрібні операції з повідомленням, наприклад зберегти його в окремому файлі .eml.

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions
from aspose.email import EmlLoadOptions

eml_load_options = EmlLoadOptions()
eml_load_options.preserve_embedded_message_format = True
eml_load_options.preserve_tnef_attachments = True

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        eml = mbox_reader.extract_message(message_info.entry_id, eml_load_options)
        eml.save(f"{eml.subject}.eml")

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

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

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

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

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

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

Наступний код отримує загальну кількість елементів (повідомлень), присутніх у файлі.

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
    items_count = mbox_reader.get_total_items_count()

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

Щоб отримати розмір даних, зчитаних протягом однієї ітерації, ви можете отримати доступ до властивості currentdatasize об’єкта mboxreader, щоб отримати розмір даних (повідомлення), які зчитуються в поточній ітерації.

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

from aspose.email.storage.mbox import MboxStorageReader, MboxLoadOptions

mbox_load_options = MboxLoadOptions()
mbox_load_options.leave_open = False
mbox_load_options.preferred_text_encoding = 'utf-8'

with MboxStorageReader.create_reader(file_name, mbox_load_options) as mbox_reader:
   for message_info in mbox_reader.enumerate_message_info():
        message_size = mbox_reader.current_data_size

Висновок

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

Ви можете дослідити інші функції Aspose.Email за допомогою документації. Також ви можете опублікувати свої запити на нашому форумі.

Дивись також