MBOX ファイルの読み取り

Aspose.Email の読み取り機能

Mozilla Thunderbird は Mozilla Foundation が開発したオープンソースのクロスプラットフォームメールクライアントです。独自のファイル構造でメールを保存し、専用のファイル形式でメッセージインデックスやサブフォルダーを管理します。Thunderbird は各メールフォルダー(例: Inbox、Sent、Trash)ごとに 1 つの .mbox ファイルを作成し、これらのファイルをユーザーのプロファイルディレクトリに格納します。各ファイルは、そのフォルダー内のすべてのメッセージを連結した形で保持しています。

Aspose.Email for .NET は、Thunderbird の .mbox ファイルからメッセージを読み取るための API を提供します。 MboxrdStorageReader 開発者が以下を行えるクラス:

  • メッセージを順次、1 件ずつ開いて読み取る
  • 本文全体をロードせずに、件名、送信者、受信者、日付などのメタデータを取得する
  • 一意の識別子(EntryId)を使用して個別メッセージを抽出する
  • エンコーディング、TNEF 添付ファイル、書式を保持する
  • 大規模アーカイブでのパフォーマンス向上のためにファイルを非同期で読み取る

MBOX ファイルを同期的に読む

Mozilla Thunderbird のメールストレージファイルからメッセージを読み取ります。この記事では、Thunderbird のメールストレージからメッセージを読む方法を示します。

  1. FileStream で Thunderbird のストレージファイルを開きます。
  2. インスタンスを作成します MboxrdStorageReader クラスを使い、上記ストリームをコンストラクタに渡します。
  3. 呼び出す ReadNextMessage() 最初のメッセージを取得します。
  4. 同じものを使用します ReadNextMessage() ループで全メッセージを読み取ります。
  5. すべてのストリームを閉じます。

以下のコードスニペットは、Thunderbird のメールストレージからすべてのメッセージを読む方法を示しています。

// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();

// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Create an instance of the MboxrdStorageReader class and pass the stream
var reader = new MboxrdStorageReader(stream, false);
// Start reading messages
var message = reader.ReadNextMessage();

// Read all messages in a loop
while (message != null)
{
    // Manipulate message - show contents
    Console.WriteLine("Subject: " + message.Subject);
    // Save this message in EML or MSG format
    message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
    message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);

    // Get the next message
    message = reader.ReadNextMessage();
}

// Close the streams
reader.Dispose();
stream.Close();

MBOX ファイルを非同期で読む

大規模な MBOX ファイルを処理する際のパフォーマンスと応答性を向上させるため、Aspose.Email for .NET は非同期 MBOX 読み取り機能を提供します。 CreateReaderAsync メソッド。この機能は、大規模なメールアーカイブを扱うアプリケーションや、バックグラウンドスレッドや Web サービスで I/O バウンドの操作を実行する場合に特に有用です。以下のコードサンプルは、Aspose.Email ストレージリーダーを使用して MBOX ファイルからメールメッセージを非同期に読み取る方法を示しています。

string mboxFilePath = "emails.mbox";

    // Create a reader for the MBOX file asynchronously
    using (var reader = await MboxrdStorageReader.CreateReaderAsync(mboxFilePath, CancellationToken.None))
    {
    Console.WriteLine("MBOX reader initialized.");

    // Read messages from the MBOX file
        while (reader.ReadNextMessage() is var message && message != null)
        {
            Console.WriteLine($"Subject: {message.Subject}");
        }
    }

ページングサポート付きでメールメッセージをバッチで読み取る

メールボックスファイルに保存されたメッセージへのページングアクセスを取得します。この機能により、開発者は大規模なメールアーカイブをより小さな部分でメッセージを取得して効率的に処理でき、パフォーマンスが向上しメモリ負荷が軽減されます。以下のメソッドを使用してください MboxStorageReader クラス:

  • EnumerateMessages(int startIndex, int count) - 指定されたインデックスから開始し、指定されたカウントで制限された MailMessage インスタンスの列挙可能なコレクションを返します。

  • EnumerateMessageInfo(int startIndex, int count) - メタデータのみを含む MboxMessageInfo オブジェクトの列挙可能なコレクションを返します。また、インデックスとカウントでページ分けされます。

以下のコードサンプルは、開始インデックスとバッチサイズを定義してメールアーカイブから特定の範囲のメッセージを読み取る方法を示しています。この例では、インデックス 0 から開始し、10 件のメッセージを取得します。

using Aspose.Email.Storage.Mbox;
using Aspose.Email;

var reader = MboxStorageReader.CreateReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10

foreach (var message in reader.EnumerateMessages(startIndex, count))
{
    Console.WriteLine("Subject: " + message.Subject);
}

MBOX ファイルを読み込む際に優先テキストエンコーディングを設定する

エンコーディングオプションは次に利用可能です MboxrdStorageReader クラス。この機能により、mbox ファイルの読み込み時に追加オプションが提供され、エンコードされたコンテンツを含むメッセージが正しく読み取られ、処理されます。以下のコードスニペットは、ニーズに合ったテキストエンコーディングを設定する方法を示しています。

var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();

MBOX ファイルからメッセージ総数を取得

この MboxrdStorageReader class は MBox ファイル内の項目数を読み取る機能を提供します。これを使用して、ファイル処理中の進行状況を表示するアプリケーションを開発できます。

// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();

using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
    Console.WriteLine("Total number of messages in Mbox file: " + reader.GetTotalItemsCount());
}

現在のメッセージサイズを取得

using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
    MailMessage msg;
    while ((msg = reader.ReadNextMessage()) != null)
    {
        long currentDataSize = reader.CurrentDataSize;

        msg.Dispose();
    }
}