Úložné soubory Mbox

Primárním účelem tohoto článku je pomoci vám ponořit se do formátu mbox a nabídnout vám kousky kódu, které vám mohou pomoci při čtení souborů mbox. Získáte znalosti o tom, jak analyzovat soubory mbox, a také o tom, jak přistupovat, zobrazovat a ukládat zprávy, které obsahují.

O formátu Mbox

Formát mbox má význam díky své dlouhé historii a širokému přijetí jako standardizovaný formát pro ukládání e-mailových zpráv. Jde o formát prostého textu, který umožňuje zřetězení více e-mailových zpráv a jejich uložení do jednoho souboru. Jednoduchost a kompatibilita tohoto formátu s různými e-mailovými klienty a systémy z něj činí oblíbenou volbu pro archivaci a přenos e-mailových dat. Formát mbox navíc uchovává základní metadata, jako je odesílatel, příjemce, předmět a časové razítko, což zajišťuje zachování integrity zpráv.

Nejoblíbenější e-mailové klienty kompatibilní s tímto formátem jsou:

  • Thunderbird – široce používaný e-mailový klient s otevřeným zdrojovým kódem, který k ukládání e-mailových zpráv používá formát mbox. Ukládá všechny zprávy složky do jediného souboru s příponou „.mbox“. Pro pohodlí uživatele a snadnou správu jsou pro každou složku v poštovní schránce vytvořeny samostatné soubory. Umožňuje uživatelům bezproblémově importovat a exportovat soubory mbox, takže je snadné migrovat e-mailová data mezi Thunderbirdem a dalšími aplikacemi kompatibilními s mbox.

  • Apple Mail – výchozí e-mailový klient na zařízeních macOS a iOS, který nabízí vestavěnou podporu pro formát mbox. Umožňuje uživatelům snadno přistupovat, importovat nebo přenášet soubory mbox v rámci Apple Mail uložením každé složky poštovní schránky jako samostatný soubor. Soubory Apple Mail jsou obvykle uloženy s příponami „.mbox“ nebo „.mbox.plist“.

  • Evolution – funkčně bohatá aplikace pro správu e-mailů a osobních informací pro Linux, podporuje také formát mbox. Umožňuje uživatelům importovat soubory mbox, což umožňuje hladkou integraci e-mailových dat do komplexní platformy Evolution.

Toto je jen několik příkladů e-mailových klientů, kteří používají formát mbox. Pochopení formátu a jeho použití v různých e-mailových klientech je zásadní při programové práci s takovými soubory, protože pomáhá zajistit kompatibilitu a přesnou analýzu e-mailových dat.

Existují různé varianty formátu, z nichž každá má své vlastní detaily implementace. Některé z běžně používaných formátů mbox zahrnují mboxrd, mboxo, mboxcl, mboxcl2. Tyto varianty se liší především ve způsobu, jakým zpracovávají určité aspekty, jako jsou oddělovače zpráv a metadata. Je důležité si uvědomit tyto rozdíly při práci se soubory mbox, protože mohou ovlivnit kompatibilitu a analýzu e-mailových dat.

Python API pro čtení souborů Mbox

Práce se soubory mbox v Python je snadná s naší knihovnou Aspose.Email for Python. Toto robustní a na funkce bohaté API, které nabízí rozsáhlou sadu funkcí pro zpracování e-mailů, jako je schopnost číst soubory mbox, extrahovat zprávy a manipulovat s daty e-mailů.

Je důležité zmínit, že Aspose.Email for Python nabízí také komplexní podporu pro různé formáty mbox, včetně těch dříve zmíněných. To znamená, že s těmito soubory můžete bez problémů pracovat z různých e-mailových klientů, bez ohledu na konkrétní detaily implementace formátu mbox. Chcete-li využít sílu API, je možné buď stáhnout jeho DLL, nebo jej nainstalovat z PyPI pomocí následujícího příkazu:

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

Otevřete soubor Mbox

Abychom mohli začít pracovat se souborem ve formátu mbox, měli bychom jej nejprve otevřít. Knihovna Aspose.Email nám s tím pomůže.

V našem kódu budeme postupovat podle kroků popsaných níže:

  • Kód začíná importem požadovaných modulů z knihovny Aspose.Email: třídy MboxStorageReader a MboxLoadOptions.

  • Poté vytvoříme instanci MboxLoadOptions, abychom určili požadované možnosti načítání souboru.

  • Poté nastavíme Leaveopen na False, což znamená, že soubor by měl být po přečtení uzavřen, a jako preferované kódování textu určíme UTF8.

  • Nakonec vytvoříme instanci třídy MboxStorageReader voláním statické metody createreader, předáním názvu zdrojového souboru a instance MboxLoadOptions.

Následující fragment kódu ukazuje, jak otevřít soubor 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)

Seznam zpráv ze souboru Mbox

Od otevření souboru můžeme prozkoumat uložené zprávy v něm. Níže uvedené fragmenty kódu představují dva přístupy k výpisu zpráv ze souboru mbox.

Přístup 1: Metoda EnumerateMessageInfo

První přístup k výpisu zpráv ze souboru mbox je použití metody enumeratemessageinfo třídy MboxStorageReader. Iteruje zprávy a zobrazuje základní informace o zprávě, jako je předmět, pole od, do a datum. Vrátí také identifikátor zprávy (ID položky), který se později použije ke čtení celého obsahu zprávy. Tento přístup má následující vlastnosti:

  • Výkon: Je rychlejší ve srovnání s jiným přístupem díky zaměření na čtení a prohlížení základních informací zprávy, aniž by se během iterace rozebíralo a načítalo tělo zprávy.

  • Efektivita: Tím, že se zaměřuje pouze na základní informace, minimalizuje spotřebu paměti a dobu zpracování. To oceníte zejména tehdy, když se musíte vypořádat s velkými soubory obsahujícími mnoho zpráv.

Chcete-li číst, vypisovat a zobrazovat zprávy v souboru mbox, budeme postupovat takto:

  • Importujte požadované moduly z knihovny Aspose.Email: třídy MboxStorageReader a MboxLoadOptions.

  • Vytvořte instanci třídy MboxLoadOptions. Tento objekt bude obsahovat různé možnosti pro načtení souboru.

  • Nakonfigurujte vlastnosti objektu:

    • Pokud chcete soubor po přečtení zavřít, nastavte Leaveopen na False.
    • Nastavte preferované kódování textu na ‘utf-8’, abyste určili požadované kódování textu pro obsah zprávy.
  • Otevřete soubor pomocí metody MboxStorageReader.createreader() třídy MboxStorageReader.

  • Iterujte každou zprávu v souboru pomocí metody enumeratemessageinfo() objektu mboxreader a extrahujte z každé zprávy konkrétní podrobnosti. V našem příkladu jsou to předmět, adresa, do a datum.

Následující fragment kódu ukazuje proces iterace zpráv pomocí metody enumeratemessageinfo a jejich získávání informací.

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)

Tímto způsobem můžeme přistupovat k vlastnostem jako Předmět, Od, Komu a Datum a zobrazit příslušné podrobnosti.

Přístup 2: Metoda EnumerateMessages

Na rozdíl od prvního přístupu, druhý je určen k přímému procházení instancí MailMessage obsažených v souboru mbox pomocí metody enumeratemessages. Tato metoda čte a načítá celý obsah zprávy během každé iterace, což umožňuje okamžitý přístup ke kompletním e-mailovým informacím. Zde jsou některé klíčové aspekty tohoto přístupu:

  • Úplnost: Umožňuje přístup a zpracování celého obsahu zprávy, včetně těla, příloh, záhlaví a dalších částí.

  • Pohodlí: Tento přístup se ukazuje jako užitečný, když chcete provádět operace s kompletní zprávou, jako je uložení každé zprávy do samostatného souboru. Zjednodušuje proces načítáním celého obsahu zprávy během každé iterace, což vám umožňuje provádět požadované operace bez nutnosti následného vyhledávání.

Následující fragment kódu ukazuje proces iterace zpráv pomocí metody enumeratemessages a načtení celého obsahu zprávy.

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

Stojí za zmínku, že načítání celého obsahu zprávy pro každou iteraci může potenciálně ovlivnit výkon, zejména při práci s velkými soubory nebo značným počtem zpráv. Při určování nejvhodnějšího přístupu pro vaši situaci je proto důležité vyhodnotit vaše specifické potřeby a vzít v úvahu faktory, jako je velikost souboru, počet zpráv a operace, které hodláte provést.

Přečtěte si zprávy v souborech Mbox

Další manipulací, kterou můžete chtít provést se souborem mbox, je čtení zpráv v něm obsažených. Můžete to udělat pomocí jejich identifikátoru řetězce odvozeného z prvního přístupu výčtu MessageInfo.

Při použití metody enumeratemessageinfo k výpisu zpráv je každá zpráva spojena s jedinečným identifikátorem v rámci jednoho souboru mbox. Tento identifikátor, obvykle reprezentovaný jako řetězec, lze získat z vlastnosti entryid objektu MboxMessageInfo.

Jakmile získáme identifikátor zprávy, můžeme jej použít k zobrazení celého obsahu zprávy pomocí následujících kroků:

  • Vytvoříme instanci EmlLoadOptions. Tento objekt bude obsahovat různé možnosti pro načítání souborů EML.
  • Nakonfigurujte vlastnosti:
    • Pokud chcete zachovat formát vložené zprávy v souboru EML, nastavte protectembeddedmessageformat na hodnotu True.
    • Pokud chcete v souboru EML zachovat přílohy TNEF, nastavte zachovánítnefattachments na hodnotu True.
  • Vytvořte instanci MboxLoadOptions. Tento objekt bude obsahovat různé možnosti pro načtení souboru mbox.
  • Nakonfigurujte vlastnosti mboxloadoptions:
    • Pokud chcete soubor po přečtení zavřít, nastavte Leaveopen na False.
    • Nastavte preferované kódování textu na ‘utf-8’, abyste určili požadované kódování textu pro obsah zprávy.
  • Otevřete soubor pomocí metody MboxStorageReader.createreader().
  • Uvnitř smyčky foreach přistupujeme k vlastnosti EntryId každého objektu MboxMessageInfo, která představuje jedinečný identifikátor odpovídající zprávy.
  • Tento identifikátor pak použijeme spolu s metodou ExtractMessage třídy MboxStorageReader k načtení celé zprávy jako objektu MailMessage.
  • Nakonec můžeme se zprávou provést libovolné požadované operace, například ji uložit do samostatného souboru .eml.

Níže uvedený fragment kódu ukazuje, jak číst jednotlivé zprávy pomocí identifikátoru řetězce:

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

Významnou výhodou tohoto přístupu je, že vám umožňuje selektivně číst a zpracovávat konkrétní zprávy bez ohledu na ostatní. Tato flexibilita se osvědčuje zejména při práci s velkými soubory, které obsahují velké množství zpráv. Selektivním zpracováním pouze požadovaných zpráv jsou minimalizovány zbytečné výpočty, což vede ke zlepšení celkové efektivity.

Je důležité pochopit, že identifikátor zprávy je v rámci jednoho souboru jedinečný. Při práci se zprávami ve více souborech mbox je tedy nutné udržovat mapování mezi těmito identifikátory a jejich odpovídajícími soubory.

Užitkové funkce

Knihovna Aspose.Email nabízí několik funkcí pro vylepšení vaší práce se soubory mbox. Podívejme se na několik z nich:

Získejte celkový počet položek uložených v mbox

Existuje jednoduchý způsob, jak určit celkový počet položek (zpráv) uložených v souboru mbox. Použijte metodu gettotalitemscount() k načtení celkového počtu položek (zpráv) přítomných v souboru.

Následující kód získá celkový počet položek (zpráv) přítomných v souboru.

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

Získejte načtení velikosti dat v jedné iteraci

Chcete-li získat velikost dat načtených během jedné iterace, můžete přistupovat k vlastnosti currentdatasize objektu mboxreader a načíst velikost dat (zprávy) čtených v aktuální iteraci.

Následující kód prochází každou zprávou v souboru. Během každé iterace se získá velikost aktuálně čtené zprávy.

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

Závěr

V tomto článku jsme prozkoumali mbox – standardizovaný a široce přijímaný formát pro ukládání e-mailových zpráv. Jeho jednoduchost a kompatibilita napříč různými e-mailovými klienty a systémy z něj činí oblíbenou volbu pro archivaci a přenos e-mailových dat. Formát včetně jeho variací je podporován naší výkonnou knihovnou Aspose.Email for Python, která umožňuje snadné čtení, extrakci a manipulaci s daty e-mailů. Naše jednoduché úryvky kódu a kroky kódu představovaly komplexní a podrobné pokyny, jak otevřít, vypsat a zobrazit zprávy v souborech mbox.

Další funkce Aspose.Email můžete prozkoumat pomocí dokumentace. Také můžete své dotazy posílat na naše fórum.

Viz také