大容量 PST ファイルの操作

大容量の Personal Storage Table(PST)ファイルを処理すると、パフォーマンスが低下しメモリ使用量が増加する可能性があります。Aspose.Email for Java は、開発者がシステムリソースを過負荷にせずにメールボックス データに効率的にアクセス、処理、管理できるさまざまな手法と API を提供します。

フォルダーとメッセージの走査に Iterable メソッドを使用

フォルダーやメッセージを反復処理する際は、返り値があるメソッドを使用してください Iterable. これによりメモリ使用量が削減され、パフォーマンスが向上します。

try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
    for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
        for (MessageInfo messageInfo : folder.enumerateMessages()) {
            // Process message
        }
    }
}

MessageInfo を使用して基本的なメッセージ プロパティを取得

基本的なメッセージの詳細のみが必要な場合は、次を使用してください MessageInfo 完全なメッセージを読み込む代わりに行うことで、処理が速くなりメモリ使用量も削減されます。

for (MessageInfo messageInfo : folder.enumerateMessages()) {
    System.out.println("Subject: " + messageInfo.getSubject());
    System.out.println("To: " + messageInfo.getDisplayTo());
    System.out.println("Importance: " + messageInfo.getImportance());
    System.out.println("Message Class: " + messageInfo.getMessageClass());
}

必要な場合以外は完全なメッセージの抽出を避けてください

使用しないでください ExtractMessage または EnumerateMapiMessages すべてのプロパティが必要でない限り、すべてのメッセージに対するメソッドです。

代わりに、次を検討してください:

a) メッセージ ID の取得

使用する enumerateMessagesEntryId フォルダー内のすべてのメッセージ ID を取得します。その後、プロパティ、メッセージ、または添付ファイルを選択的に抽出できます。

for (String id : folder.enumerateMessagesEntryId()) {
    // Retrieve a property using ID (extractProperty),
    // Extract a MapiMessage (extractMessage),
    // Extract message attachments (extractAttachments),
    // Save message to a stream (saveMessageToStream).
}

b) 単一プロパティの抽出

使用する ExtractProperty 特定のプロパティだけが必要な場合は、 MessageInfo.

for (String msgId : folder.enumerateMessagesEntryId()) {
    String transportMessageHeaders =
        pst.extractProperty(
            org.apache.commons.codec.binary.Base64.decodeBase64(msgId),
            KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()
        ).getString();
}

c) 添付ファイルのみの抽出

添付ファイルだけが必要な場合は、次を使用してください ExtractAttachments.

for (String msgId : folder.enumerateMessagesEntryId()) {
    MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}

検索条件を使用してメッセージをフィルタリング

を使用したメッセージのフィルタリング 検索条件 ロードされるメッセージ数が減り、パフォーマンスが向上します。

try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {

    PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
    // Unread messages
    builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);

    for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
        MessageInfoCollection unread = folder.getContents(builder.getQuery());
    }
}

ストリームにメッセージを保存

メッセージを個別に抽出・保存する代わりに、以下を使用してください SaveMessageToStream パフォーマンス向上のためです。

for (String id : folder.enumerateMessagesEntryId()) {
    try (OutputStream fos  = new FileOutputStream("message.msg")) {
        pst.saveMessageToStream(id, fos);
    }
}

可能な限りバルクメソッドを使用してください

必要なときはいつでも 追加 または 削除 複数のアイテムについては、個別操作よりもバルクメソッドを使用してください。これによりオーバーヘッドが減り、パフォーマンスが向上します。