Mbox ストレージ ファイル

この記事では、mbox 形式について説明し、mbox ファイルの読み取りを開始するのに役立つコード スニペットを提供します。 mbox ファイルを解析し、そこに含まれるメッセージを表示および保存する方法を学習します。

Mbox フォーマットとは何ですか?

mbox 形式は、電子メール メッセージを保存するために広く使用されているファイル形式です。これには長い歴史があり、Thunderbird、Apple Mail、その他多くの人気のある電子メール クライアントでサポートされています。 mbox 形式では、複数の電子メール メッセージが 1 つのファイルにプレーン テキストとして保存されるため、電子メール データのアーカイブや転送に便利です。

mbox 形式にはさまざまなバリエーションがあり、それぞれに独自の実装の詳細があります。よく見かける mbox 形式には、「mboxrd」、「mboxo」、「mboxcl」、「mboxcl2」などがあります。これらのバリエーションは主に、メッセージ区切り文字やメタデータなどの特定の側面を処理する方法が異なります。 mbox ファイルを操作するときは、これらの違いに注意することが重要です。これらの違いは、電子メール データの互換性と解析に影響を与える可能性があります。

いくつかの電子メール クライアントと、それらのクライアントが mbox 形式をどのように利用しているかを詳しく見てみましょう。

  • Thunderbird: Thunderbird は、mbox 形式を使用して電子メール メッセージを保存する、人気のあるオープンソース電子メール クライアントです。フォルダー内のすべてのメッセージを、拡張子「.mbox」が付いた単一の mbox ファイルに保存します。 Thunderbird は、ユーザーのメールボックス内のフォルダーごとに個別の mbox ファイルを作成し、電子メール データの管理とバックアップを容易にします。

  • Apple Mail: macOS および iOS デバイスのデフォルトの電子メール クライアントである Apple Mail も mbox 形式を採用しています。各メールボックス フォルダーを個別の mbox ファイルとして保存するため、Apple Mail インストール間での電子メール データの移行または転送が簡単になります。 Apple Mail の mbox ファイルには通常、拡張子「.mbox」または「.mbox.plist」が付いています。

  • Eudora: 過去に人気のある電子メール クライアントである Eudora は、mbox 形式を利用して電子メール メッセージを保存していました。 「Eudora メールボックス形式」として知られるわずかに変更された mbox 形式が使用されていました。 Eudora メールボックス形式には、ラベルやステータス フラグなど、Eudora に固有の追加機能とメタデータが組み込まれています。

これらは、mbox 形式を使用する電子メール クライアントのほんの数例です。 mbox 形式とさまざまな電子メール クライアントでのその使用法を理解することは、mbox ファイルをプログラムで操作する場合に不可欠です。これは、電子メール データの互換性と正確な解析を確保するのに役立ちます。

Mbox ファイルを読み取るための .NET API

C# で mbox ファイルを操作するには、Aspose.Email for .NET を使用します。この堅牢で機能豊富なライブラリは、mbox ファイルの読み取り、メッセージの抽出、電子メール データの操作など、電子メール処理のための幅広い機能を提供します。 Aspose.Email for .NET は、上記のものを含むさまざまな mbox 形式を包括的にサポートしていることは注目に値します。これにより、特定の mbox 実装の詳細に関係なく、さまざまな電子メール クライアントからの mbox ファイルをシームレスに操作できるようになります。 API の機能を活用するには、次のコマンドを使用して DLL を ダウンロード するか、NuGet からインストールすることができます。

PM> Install-Package Aspose.Email

Mbox ファイルを開く

mbox 形式とさまざまな電子メール クライアントでのその使用法について理解が深まったので、次に、Aspose.Email を使用して mbox ファイルを操作する機能と実践方法を調べてみましょう。 mbox ファイルの解析を開始するには、それを開く必要があります。 mbox ファイルを開く手順は次のとおりです。

  • まず、MboxLoadOptions のインスタンスを作成して、mbox ファイルをロードするための必要なオプションを指定します。

  • 次に、LeaveOpen を false に設定して、読み取り後に mbox ファイルを自動的に閉じ、優先テキスト エンコーディングとして Encoding.UTF8 を指定します。

  • 最後に、CreateReader 静的メソッドを呼び出し、ソース MBOX ファイル名と MboxLoadOptions インスタンスを渡して、MboxStorageReader クラスのインスタンスを作成します。

手順は次のコード スニペットで表されます。

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

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

メッセージのリスト表示

mbox ファイルを開くと、保存されているメッセージに関する情報を取得できます。次のコード スニペットは、mbox ファイルからメッセージを一覧表示する 2 つの方法を示しています。

アプローチ 1: EnumerateMessageInfo メソッドを使用する

MboxStorageReader クラスの EnumerateMessageInfo メソッドは、メッセージを反復処理し、件名、送信元、送信先、日付などの基本的なメッセージ情報を表示するために使用されます。また、後で完全なメッセージの内容を読み取るために使用できるメッセージ識別子 (エントリ ID) も返します。このアプローチには次の特徴があります。

  • パフォーマンス: このアプローチは、基本的なメッセージ情報の読み取りと表示のみを行うため、2 番目のアプローチと比較してパフォーマンスが高くなります。これにより、反復中にメッセージ コンテンツ全体を解析してロードするオーバーヘッドが回避されます。

  • 効率: 必要な情報のみを取得することで、メモリの消費と処理時間を最小限に抑えます。これは、多数のメッセージを含む大きな 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);
    }
}

このようにして、Subject、From、To、Date などのプロパティにアクセスして、関連する詳細を表示できます。

アプローチ 2: EnumerateMessages メソッドを使用する

2 番目の方法では、EnumerateMessages メソッドを使用して、mbox ファイルに含まれる MailMessage インスタンスを直接反復処理します。このアプローチでは、各反復中にメッセージの内容全体が読み取られてロードされるため、完全な電子メール情報に即座にアクセスできます。このアプローチの重要な側面をいくつか示します。

  • 完全性: 最初のアプローチとは異なり、この方法では、本文、添付ファイル、ヘッダー、その他の部分を含むメッセージ コンテンツ全体にアクセスして処理できます。これにより、反復中に完全な電子メール データへの包括的なアクセスが提供されます。

  • 利便性: この方法は、(例に示すように) 各メッセージを個別のファイルに保存するなど、メッセージ全体に対して操作を実行する場合に便利です。各反復でメッセージのコンテンツ全体をロードすることでプロセスが簡素化され、後続の検索を必要とせずに必要な操作を実行できるようになります。

ただし、特に大きな mbox ファイルや大量のメッセージを処理する場合、反復ごとにメッセージ コンテンツ全体を読み込むとパフォーマンスに影響を与える可能性があることを考慮することが重要です。完全なメッセージ コンテンツをロードするために必要な追加の処理時間は、2 つのアプローチのどちらかを選択するときに考慮すべきトレードオフとなる可能性があります。

次のコード スニペットは、EnumerateMessages メソッドを使用してメッセージを反復処理し、メッセージ コンテンツ全体を取得するプロセスを示しています。

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

このようにして、例に示すようにメッセージを個別の .eml ファイルに保存するなど、各メッセージに対してさまざまな操作を実行できます。

最終的に、これらのアプローチのどちらを選択するかは、特定のユースケースと要件によって異なります。基本的なメッセージ情報にすばやくアクセスし、特定のメッセージに対してさらに操作を実行する必要がある場合は、最初のアプローチの方がパフォーマンスが向上します。一方、完全なメッセージ コンテンツにすぐにアクセスする必要があり、すべてのメッセージに対して一度に操作を実行したい場合は、2 番目の方法の方が利便性が高くなりますが、パフォーマンスは若干低下します。

どのアプローチが自分のシナリオにより適しているかを決定する際には、特定のニーズを評価し、mbox ファイルのサイズ、メッセージの数、実行する予定の操作などの要素を考慮することが重要です。

メッセージを読む

前のセクションでは、メッセージをリストする方法について説明しました。ここで、文字列識別子を使用して個々のメッセージを読み取る方法を見てみましょう。文字列識別子は、MessageInfo を列挙する最初のアプローチから派生できます。

EnumerateMessageInfo メソッドを使用してメッセージを一覧表示する場合、各メッセージは 1 つの mbox ファイル内で一意の識別子に関連付けられます。この識別子は通常文字列として表され、MboxMessageInfo オブジェクトの EntryId プロパティから取得できます。

メッセージ識別子を取得したら、それを使用して、次の手順で完全なメッセージの内容を表示できます。

  • EmlLoadOptions のインスタンスを作成して、抽出されたメッセージをロードするための必要なオプションを指定します。
  • 埋め込みメッセージ形式と TNEF 添付ファイルの保存が可能になります。
  • foreach ループ内で、対応するメッセージの一意の識別子を表す各 MboxMessageInfo オブジェクトの EntryId プロパティにアクセスします。
  • 次に、この識別子を MboxStorageReader クラスの ExtractMessage メソッドとともに使用して、完全なメッセージを 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 に保存されている総アイテム数を取得する

GetTotalItemsCount メソッドを使用すると、mbox ファイルに保存されているアイテムの合計数を簡単に表示できます。これは、電子メールのコレクションのサイズを追跡するのに役立ちます。これを実現するには、次のコード スニペットを使用します。

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

1回の反復で読み取られたデータサイズを取得します

反復中に CurrentDataSize プロパティにアクセスすると、1 回の反復で読み取られたデータのサイズを取得できます。これは、パフォーマンスの最適化や進捗状況の追跡にとって貴重な情報となる可能性があります。これを実現するには、次のコード スニペットを使用します。

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

結論

この記事では、mbox 形式について調査し、C# プロジェクトで mbox ファイルを操作するための強力なツールとして Aspose.Email for .NET ライブラリを紹介しました。 mbox ファイルを開く方法、メッセージを解析して表示する方法、およびいくつかのユーティリティ機能を紹介しました。この知識と提供されたコード スニペットを活用すれば、プログラミング作業で mbox ファイルを簡単に処理できるようになります。 ドキュメント を使用して、Aspose.Email の他の機能を調べることができます。また、フォーラム に質問を投稿することもできます。

関連項目