Úložné soubory Mbox

V tomto článku prozkoumáme formát mbox a poskytneme vám úryvky kódu, které vám pomohou začít se čtením souborů mbox. Dozvíte se, jak analyzovat soubory mbox a prohlížet a ukládat zprávy v nich obsažené.

Co je formát Mbox?

Formát mbox je široce používaný formát souborů pro ukládání e-mailových zpráv. Má dlouhou historii a je podporován několika oblíbenými e-mailovými klienty, včetně Thunderbird, Apple Mail a mnoha dalších. Ve formátu mbox je více e-mailových zpráv uloženo jako prostý text v jediném souboru, což usnadňuje archivaci a přenos e-mailových dat.

Existují různé varianty formátu mbox, 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.

Podívejme se blíže na několik e-mailových klientů a na to, jak využívají formát mbox:

  • Thunderbird: Thunderbird je populární 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 mbox s příponou „.mbox“. Thunderbird vytváří samostatné soubory mbox pro každou složku v poštovní schránce uživatele, což umožňuje snadnou správu a zálohování e-mailových dat.

  • Apple Mail: Apple Mail, výchozí e-mailový klient na zařízeních macOS a iOS, také přijímá formát mbox. Ukládá každou složku poštovní schránky jako samostatný soubor mbox, což usnadňuje migraci nebo přenos e-mailových dat mezi instalacemi Apple Mail. Soubory mbox Apple Mail mají obvykle příponu „.mbox“ nebo „.mbox.plist“.

  • Eudora: Eudora, v minulosti oblíbený e-mailový klient, využíval k ukládání e-mailových zpráv formát mbox. Používal mírně upravený formát mbox známý jako „formát poštovní schránky Eudora“. Formát poštovní schránky Eudora obsahoval další funkce a metadata specifická pro Eudoru, jako jsou štítky a příznaky stavu.

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

.NET API pro čtení souborů Mbox

Pro práci se soubory mbox v C# použijeme Aspose.Email for .NET. Tato robustní a na funkce bohatá knihovna poskytuje širokou škálu funkcí pro zpracování e-mailů, včetně čtení souborů mbox, extrahování zpráv a manipulace s e-mailovými daty. Za zmínku stojí, že Aspose.Email for .NET poskytuje komplexní podporu pro různé formáty mbox, včetně těch výše uvedených. To vám umožňuje bezproblémově pracovat se soubory mbox z různých e-mailových klientů, bez ohledu na konkrétní detaily implementace mbox. Chcete-li využít sílu API, je možné buď stáhnout jeho DLL, nebo jej nainstalovat z NuGet pomocí následujícího příkazu:

PM> Install-Package Aspose.Email

Otevírání souborů Mbox

Nyní, když jsme lépe porozuměli formátu mbox a jeho použití v různých e-mailových klientech, pojďme prozkoumat funkce a postupy práce se soubory mbox pomocí Aspose.Email. Abychom mohli začít analyzovat soubor mbox, musíme jej otevřít. Níže jsou uvedeny kroky k otevření souboru mbox:

  • Nejprve vytvoříme instanci MboxLoadOptions, abychom specifikovali požadované možnosti pro načtení souboru mbox.

  • Poté nastavíme LeaveOpen na false, aby se soubor mbox po přečtení automaticky zavřel a jako preferované kódování textu bylo určeno Encoding.UTF8.

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

Kroky jsou uvedeny v následujícím fragmentu kódu:

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

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

Výpis zpráv

Jakmile otevřeme soubor mbox, můžeme načíst informace o uložených zprávách. Následující fragmenty kódu demonstrují dva přístupy k výpisu zpráv ze souboru mbox.

Přístup 1: Použití metody EnumerateMessageInfo

Metoda EnumerateMessageInfo třídy MboxStorageReader se používá k iteraci zpráv a zobrazení základních informací o zprávě, jako je předmět, pole od, do a datum. Vrátí také identifikátor zprávy (ID položky), který lze později použít ke čtení celého obsahu zprávy. Tento přístup má následující vlastnosti:

  • Výkon: Tento přístup je výkonnější ve srovnání s druhým přístupem, protože pouze čte a zobrazuje základní informace o zprávě. Vyhne se režii analýzy a načítání celého obsahu zprávy během iterace.

  • Efektivita: Načítáním pouze nezbytných informací minimalizuje spotřebu paměti a dobu zpracování. To je užitečné zejména při práci s velkými soubory mbox obsahujícími mnoho zpráv.

Je však důležité poznamenat, že s tímto přístupem se během počáteční iterace nenačte celý obsah zprávy. Místo toho jsou načteny pouze podstatné detaily, což umožňuje rychlejší počáteční zpracování.

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

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

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: Použití metody EnumerateMessages

Druhý způsob zahrnuje použití metody EnumerateMessages k přímému procházení instancí MailMessage obsažených v souboru mbox. Tento přístup č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: Na rozdíl od prvního přístupu vám tato metoda umožňuje přístup a zpracování celého obsahu zprávy, včetně těla, příloh, záhlaví a dalších částí. Poskytuje komplexní přístup ke kompletním datům e-mailu během iterace.

  • Pohodlí: Tento přístup je užitečný, když chcete provádět operace s celou zprávou, jako je uložení každé zprávy do samostatných souborů (jak je znázorněno v příkladu). Zjednodušuje proces načítáním celého obsahu zprávy v každé iteraci, což vám umožňuje provádět požadované operace bez nutnosti následného vyhledávání.

Je však důležité vzít v úvahu, že načítání celého obsahu zprávy během každé iterace může mít dopad na výkon, zejména při práci s velkými soubory mbox nebo s velkým počtem zpráv. Dodatečná doba zpracování potřebná k načtení úplného obsahu zprávy může být kompromisem, který je třeba zvážit při výběru mezi těmito dvěma přístupy.

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

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

Tímto způsobem můžeme s každou zprávou provádět různé operace, například ji uložit do samostatných souborů .eml, jak je znázorněno v příkladu.

Nakonec výběr mezi těmito přístupy závisí na vašem konkrétním případu použití a požadavcích. Pokud potřebujete rychle získat přístup k základním informacím o zprávách a provádět další operace s konkrétními zprávami, první přístup nabízí lepší výkon. Na druhou stranu, pokud potřebujete okamžitý přístup ke kompletnímu obsahu zprávy a chcete provádět operace se všemi zprávami najednou, druhý přístup poskytuje pohodlí na úkor mírně nižšího výkonu.

Při rozhodování o tom, který přístup je pro váš scénář vhodnější, je důležité vyhodnotit své specifické potřeby a vzít v úvahu faktory, jako je velikost souboru mbox, počet zpráv a operace, které hodláte provést.

Čtení zpráv

V předchozí části jsme probrali, jak vypisovat zprávy. Nyní se podívejme, jak můžeme číst jednotlivé zprávy pomocí jejich řetězcového identifikátoru, který lze odvodit 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 pro specifikaci požadovaných možností pro načítání extrahovaných zpráv.
  • Umožňujeme zachování formátu vložených zpráv a příloh TNEF.
  • 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:

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

Využitím identifikátoru zprávy získaného z prvního přístupu výčtu MessageInfo můžeme efektivně číst jednotlivé zprávy na základě našich specifických požadavků.

Stojí za zmínku, že tento přístup vám umožňuje selektivně číst a zpracovávat zprávy, které vás zajímají, a přitom přeskakovat ostatní. Tato flexibilita je zvláště cenná při práci s velkými soubory mbox obsahujícími značný počet zpráv, protože minimalizuje zbytečné zpracování a zlepšuje celkovou efektivitu.

Mějte na paměti, že identifikátor zprávy je v rámci jednoho souboru mbox jedinečný. Pokud potřebujete pracovat se zprávami ve více souborech mbox, budete muset udržovat mapování mezi identifikátory a jejich odpovídajícími soubory.

Díky možnosti číst jednotlivé zprávy pomocí jejich jedinečného identifikátoru řetězce máte větší kontrolu a flexibilitu při zpracování souborů mbox a můžete efektivně extrahovat a manipulovat s požadovaným obsahem e-mailů.

Užitkové funkce

Knihovna Aspose.Email nabízí několik užitečných funkcí, které se mohou hodit při práci se soubory mbox. Zde je několik příkladů:

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

Celkový počet položek uložených v souboru mbox můžeme snadno zobrazit pomocí metody GetTotalItemsCount. To může být užitečné pro sledování velikosti sbírky e-mailů. K tomu použijte následující fragment kódu.

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

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

Přístupem k vlastnosti CurrentDataSize během iterace můžeme získat velikost dat, která byla načtena v jedné iteraci. To mohou být cenné informace pro optimalizaci výkonu nebo sledování pokroku. Chcete-li toho dosáhnout, použijte následující fragment kódu:

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

Závěr

V tomto článku jsme prozkoumali formát mbox a představili knihovnu Aspose.Email for .NET jako výkonný nástroj pro práci se soubory mbox v projektech C#. Zabývali jsme se tím, jak otevírat soubory mbox, analyzovat a zobrazovat zprávy, a předvedli jsme některé užitečné funkce. Vyzbrojeni těmito znalostmi a poskytnutými úryvky kódu jste nyní vybaveni pro snadné zpracování souborů mbox ve vašich programovacích snahách. Další funkce Aspose.Email můžete prozkoumat pomocí dokumentace. Také můžete své dotazy posílat na naše fórum.

Viz také