Thunderbird を使用したプログラミング

MBOX からメッセージを読む

Mozilla Thunderbird はオープンソースのクロスプラットフォームメールクライアントで、Mozilla Foundation が開発しています。独自のファイル構造にメールを保存し、専用のファイル形式でメッセージインデックスやサブフォルダーを管理します。Aspose.Email は Thunderbird のメールストレージ構造と連携できます。 MboxrdStorageReader class は開発者が Mozilla Thunderbird のメールストレージファイルからメッセージを読み取れるようにします。この記事では Thunderbird のメールストレージからメッセージを読む方法を示します:

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

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

//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
    MboxLoadOptions lo = new MboxLoadOptions();
    lo.setLeaveOpen(false);
    try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
        MailMessage msg;
        String[] fromMarker = {null};
        while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
            System.out.println(fromMarker[0]);
        }
    }
}

MBOX からメッセージを読むときのロードオプション設定

Aspose.Email API は MBOX ファイルからメッセージを読む際に次の操作を可能にします:

TNEF 添付ファイルを保持したまま MBOX から PST へのメッセージ変換

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

MailStorageConverter.MboxMessageOptions() プロパティ - Mbox ストレージを解析する際のメールロードオプションを取得または設定します。

TNEF 添付ファイルを保持したままメッセージを読む

MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);

MboxrdStorageReader.readNextMessage(EmlLoadOptions options) method - EmlLoadOptions パラメーターは Mbox ストレージからメッセージを読み取る際のオプションを指定します。

TNEF 添付ファイルを保持したままメッセージを列挙

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
    // do something
}

MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) method - Mbox ストレージからメッセージを読み取る際に EmlLoadOptions を指定します。

ID による MBOX からのメッセージ抽出

時々、ID によって選択されたメッセージを抽出する必要があります。たとえば、アプリケーションがデータベースに識別子を保存し、要求に応じてメッセージを抽出する場合です。この方法は、毎回全ストレージを走査して特定のメッセージを検索する必要を回避する効率的な手段です。MBOX ファイル向けにこの機能を実装するため、Aspose.Email は以下のメソッドとクラスを提供します:

以下のコードサンプルは、ID で MBOX からメッセージを抽出する方法を示しています:

MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());

for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
    MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}

注意: メッセージ ID はストレージファイル内で一意です。ID は Aspose.Email によって作成され、他のサードパーティの MBOX 処理ライブラリやアプリでは使用できません。

MBOX ファイル内のメールをフィルタおよび検索

Aspose.Email for Java はクエリを使用して MBOX ファイル内のメッセージをフィルタまたは検索する機能を提供します。これにより、特定の条件に一致するメッセージのみを取得でき、 大きな MBOX ファイルを扱う際のアプリケーションのパフォーマンスとユーザビリティを向上させます。

以下のコードサンプルは、次のメソッドを実装してこの機能を実現する方法を示しています:

  • enumerateMessages(MailQuery query) - 指定されたクエリに一致する MailMessage インスタンスの列挙可能コレクションを返します。

  • enumerateMessageInfo(MailQuery query) - 指定されたクエリに一致する MboxMessageInfo インスタンスの列挙可能コレクションを返します。

MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());

for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
    System.out.println("Subject: " + message.getSubject());
}

MBOX ファイルからのページング メッセージ取得

Aspose.Email for Java は MBOX ファイルからメッセージをページング取得する機能をサポートします。この機能により、大きな MBOX ファイルを小さなバッチで取得でき、メモリ消費を抑え、パフォーマンスを向上させます。

以下のコードサンプルは、次のメソッドを実装してこの機能を実現する方法を示しています:

  • enumerateMessages(int startIndex, int count) - 指定されたインデックスから開始して、指定された数の MailMessage インスタンスを取得します。

  • enumerateMessageInfo(int startIndex, int count) - 指定されたインデックスから開始して、指定された数の MboxMessageInfo インスタンスを取得します。

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

for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
    System.out.println("Subject: " + message.getSubject());
}

メッセージの書き込み

この MboxrdStorageWriter class は Thunderbird のメールストレージファイルに新しいメッセージを書き込む機能を提供します。メッセージを書き込むには:

  1. FileStream で Thunderbird のストレージファイルを開きます。
  2. インスタンスを作成します MboxrdStorageWriter クラスを使い、上記ストリームをコンストラクタに渡します。
  3. 上記を使用して新しいメッセージを作成します MailMessage クラス。
  4. 呼び出す WriteMessage() メソッドに渡し、上記を使用します MailMessage インスタンスを使用してメッセージを Thunderbird のストレージに追加します。
  5. すべてのストリームを閉じます。

以下のコードスニペットは、Thunderbird のメールストレージにメッセージを書き込む方法を示しています。

//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
    try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
        MailMessage msg = MailMessage.load(dataDir + "Message.msg");
        String[] fromMarker = {null};
        writer.writeMessage(msg, fromMarker);
        System.out.println(fromMarker[0]);
    }
}

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

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

MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
    System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}

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

FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
    MailMessage msg = null;
    while ((msg = reader.readNextMessage()) != null) {
        //returns the number of bytes read
        long currentDataSize = reader.getCurrentDataSize();
        System.out.println("Bytes read: " + currentDataSize);
    }
}

Mbox ファイルをロードする際の優先テキストエンコーディングの設定

この setPreferredTextEncoding(Charset value) メソッド( MboxLoadOptions class はメッセージの優先エンコーディングを取得または設定します。指定したロードオプションで Mbox ファイルのリーダーを作成すると、エンコードされたコンテンツを正しく読み取り処理できます。以下のコードサンプルは、この機能をプロジェクトに実装する方法を示しています:

MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();

Mbox ストレージを小さなパーツに分割

Aspose.Email は、Mbox ストレージの処理をより細かく制御できる以下のコンポーネントを提供し、大きなファイルを管理しやすいパーツに分割したり、処理中にカスタム アクションを実装したりできます。

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) 前のメソッドのバリエーションで、分割された Mbox ファイル名のカスタムプレフィックスも指定できます。

MboxStorageReader.setEmlCopyingEventHandler イベント このイベントはメールが新しい Mbox ファイルにコピーされる前に発生します。メールが処理される前にカスタマイズした操作を行えます。

MboxStorageReader.setEmlCopiedEventHandler イベント このイベントはメールが新しい Mbox ファイルにコピーされた後に発生します。メールに対して後処理を実行できます。

MboxStorageReader.setMboxFileCreatedEventHandler イベント このイベントは新しい Mbox ファイルが作成されたときに発生します。このイベントを処理してファイル作成に反応できます。

MboxStorageReader.setMboxFileFilledEventHandler イベントは、新しい Mbox ファイルがメールで埋められたときに発生します。メールでファイルが埋められたことに対応できます。

NewStorageEventHandler(Object sender, NewStorageEventArgs e) は、新しいストレージファイルが作成または処理された後に発生するイベントを処理するデリゲートを表します。

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) は、Mime アイテムのコピーに関連するイベントを処理するデリゲートを表し、通常は MailMessage オブジェクトがあるストレージから別のストレージへコピーされるシナリオで使用されます。

NewStorageEventArgs は、新しいストレージファイルが作成された後、または処理された後に発生するイベントで使用される引数を表します。

MimeItemCopyEventArgs は、MailMessage オブジェクトをあるストレージから別のストレージへコピーする際(コピー開始前または完了後)に関連するイベント引数を表します。

以下のコードサンプルは、Mbox ファイルと対話し、これらのファイルに関連するイベントを処理し、メッセージ数とパート数を追跡しながら Mbox ストレージを小さなパーツに分割するなどの操作を実行する方法を示しています。

messageCount = 0;
partCount = 0;

// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);

// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("New Mbox file created: " + e.getFileName());
        partCount++;
    }
});

mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("Mbox file filled with messages: " + e.getFileName());
    }
});

mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
    public void invoke(Object sender, MimeItemCopyEventArgs e) {
        System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
        messageCount++;
    }
});

// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");

// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);