Mbox ストレージ ファイル

この記事の主な目的は、mbox 形式について詳しく説明し、mbox ファイルの読み取りプロセスを支援できるコードを提供することです。 mbox ファイルを解析する方法と、mbox ファイルに含まれるメッセージにアクセス、表示、保存する方法についての知識が得られます。

Mbox フォーマットについて

mbox 形式は、その長い歴史と電子メール メッセージを保存するための標準化された形式として広く受け入れられているため、重要性を持っています。これは、複数の電子メール メッセージを連結して 1 つのファイルに保存できるプレーンテキスト ファイル形式です。この形式はシンプルであり、さまざまな電子メール クライアントやシステム間で互換性があるため、電子メール データのアーカイブと転送によく使用されます。さらに、mbox 形式は送信者、受信者、件名、タイムスタンプなどの重要なメタデータを保持するため、メッセージの整合性が確実に保持されます。

この形式と互換性のある最も一般的な電子メール クライアントは次のとおりです。

  • Thunderbird - mbox 形式を使用して電子メール メッセージを保存する、広く使用されているオープンソース電子メール クライアント。フォルダー内のすべてのメッセージを、拡張子「.mbox」が付いた単一のファイルに保存します。ユーザーの利便性と管理を容易にするために、メールボックス内のフォルダーごとに個別のファイルが作成されます。これにより、ユーザーは mbox ファイルをシームレスにインポートおよびエクスポートできるため、Thunderbird と他の mbox 互換アプリケーションの間で電子メール データを簡単に移行できるようになります。

  • Apple Mail - macOS および iOS デバイスのデフォルトの電子メール クライアントで、mbox 形式の組み込みサポートを提供します。これにより、ユーザーは各メールボックス フォルダーを個別のファイルとして保存することで、Apple Mail 内の mbox ファイルに簡単にアクセス、インポート、転送できるようになります。 Apple Mail ファイルは通常、拡張子「.mbox」または「.mbox.plist」を付けて保存されます。

  • Evolution - Linux 用の機能豊富な電子メールおよび個人情報管理アプリケーションは、mbox 形式もサポートしています。これにより、ユーザーは mbox ファイルをインポートできるようになり、電子メール データを Evolution の包括的なプラットフォームにスムーズに統合できるようになります。

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

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

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

Aspose.Email for Python ライブラリを使用すると、Python での mbox ファイルの操作が簡単になります。この堅牢で機能豊富な 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 を指定します。

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

次のコード スニペットは、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 ファイルからメッセージをリストする 2 つのアプローチを表しています。

アプローチ 1: EnumerateMessageInfo メソッド

mbox ファイルからメッセージをリストする最初の方法は、MboxStorageReader クラスの enumeratemessageinfo メソッドを使用することです。メッセージを繰り返し処理し、件名、開始日、終了日のフィールド、日付などの基本的なメッセージ情報を表示します。また、後で完全なメッセージの内容を読み取るために使用されるメッセージ識別子 (エントリ ID) も返します。このアプローチには次の特徴があります。

  • パフォーマンス: 基本的なメッセージ情報の読み取りと表示に焦点を当てているため、反復中にメッセージ本文の解析と読み込みを回避できるため、他のアプローチと比較して高速です。

  • 効率: 基本的な情報のみを対象とすることで、メモリの消費と処理時間を最小限に抑えます。これは、多数のメッセージを含む大きなファイルを処理する必要がある場合に特に役立ちます。

mbox ファイル内のメッセージを読み取り、リストし、表示するには、次の手順に従います。

  • Aspose.Email ライブラリから必要なモジュールをインポートします: MboxStorageReader クラスと MboxLoadOptions クラス。

  • MboxLoadOptions クラスのインスタンスを作成します。このオブジェクトには、ファイルをロードするためのさまざまなオプションが保持されます。

  • オブジェクトのプロパティを構成します。

    • ファイルを読み取った後にファイルを閉じる場合は、leaveopen を False に設定します。
    • メッセージコンテンツに必要なテキストエンコーディングを指定するには、preferredtextencoding を「utf-8」に設定します。
  • MboxStorageReaderクラスのMboxStorageReader.createreader()メソッドでファイルを開きます。

  • mboxreader オブジェクトの enumeratemessageinfo() メソッドを使用して、ファイル内の各メッセージを反復処理し、各メッセージから特定の詳細を抽出します。この例では、件名、アドレス、宛先、日付です。

次のコード スニペットは、 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)

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

アプローチ 2: EnumerateMessages メソッド

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

  • 完全性: 本文、添付ファイル、ヘッダー、その他の部分を含むメッセージ コンテンツ全体にアクセスして処理することができます。

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

次のコード スニペットは、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 ファイルに対して実行する必要があるもう 1 つの操作は、ファイルに含まれるメッセージの読み取りです。これは、MessageInfo を列挙する最初のアプローチから派生した文字列識別子を使用して行うことができます。

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

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

  • EmlLoadOptions のインスタンスを作成します。このオブジェクトには、EML ファイルをロードするためのさまざまなオプションが保持されます。
  • プロパティを設定します。
    • EML ファイル内に埋め込みメッセージ形式を保存する場合は、preserveembeddedmessageformat を True に設定します。
    • EML ファイル内に TNEF 添付ファイルを保存する場合は、preservetnefattachments を True に設定します。
  • MboxLoadOptions のインスタンスを作成します。このオブジェクトには、mbox ファイルをロードするためのさまざまなオプションが保持されます。
  • mboxloadoptions のプロパティを構成します。
    • ファイルを読み取った後にファイルを閉じる場合は、leaveopen を False に設定します。
    • メッセージコンテンツに必要なテキストエンコーディングを指定するには、preferredtextencoding を「utf-8」に設定します。
  • MboxStorageReader.createreader() メソッドでファイルを開きます。
  • foreach ループ内で、対応するメッセージの一意の識別子を表す各 MboxMessageInfo オブジェクトの EntryId プロパティにアクセスします。
  • 次に、この識別子を MboxStorageReader クラスの ExtractMessage メソッドとともに使用して、完全なメッセージを 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()

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

1 回の反復中に読み取られるデータのサイズを取得するには、mboxreader オブジェクトの currentdatasize プロパティにアクセスして、現在の反復で読み取られるデータ (メッセージ) のサイズを取得できます。

次のコードは、ファイル内の各メッセージを反復処理します。各反復中に、現在読み取られているメッセージのサイズが取得されます。

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 の他の機能を調べることができます。また、フォーラム に質問を投稿することもできます。

関連項目