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 のメールストレージからメッセージを読む方法を示します。
- FileStream で Thunderbird のストレージファイルを開きます。
- インスタンスを作成します MboxrdStorageReader クラスを使い、上記ストリームをコンストラクタに渡します。
- 呼び出す ReadNextMessage() 最初のメッセージを取得します。
- 同じものを使用します ReadNextMessage() ループで全メッセージを読み取ります。
- すべてのストリームを閉じます。
以下のコードスニペットは、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();
}
}