Работа с большими PST файлами

Contents
[ ]

Производительность может снижаться при обработке больших PST файлов. Следующие рекомендации помогут улучшить производительность вашего приложения при обработке больших файлов.

try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
    for (FolderInfo folder : pst.getRootFolder().enumerateFolders())
        for (MessageInfo messageInfo : folder.enumerateMessages()) {
            // Выполните что-то с сообщением
        }
}
for (MessageInfo messageInfo : folder.enumerateMessages()) {
    System.out.println("Тема: " + messageInfo.getSubject());
    System.out.println("Кому: " + messageInfo.getDisplayTo());
    System.out.println("Важно: " + messageInfo.getImportance());
    System.out.println("Класс сообщения: " + messageInfo.getMessageClass());
}
for (String id : folder.enumerateMessagesEntryId())
{
    // Используйте id для получения свойства (extractProperty),
    // извлечения MapiMessage (extractMessage),
    // извлечения вложений сообщения (extractAttachments),
    // сохранения сообщения в поток (saveMessageToStream).
}
for (String msgId : folder.enumerateMessagesEntryId()) {
    String transportMessageHeaders =
            pst.extractProperty(org.apache.commons.codec.binary.Base64.decodeBase64(msgId),
                    KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()).getString();
}
for (String msgId : folder.enumerateMessagesEntryId()) {
    MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {

    PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
    // Непрочитанные сообщения
    builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);

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

Вместо использования:

for (String id : folder.enumerateMessagesEntryId()) {
    MapiMessage msg = pst.extractMessage(id);
    msg.save("message.msg");
}

Используйте:

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