Trabalhando com grandes arquivos PST
Contents
[
Hide
]
O desempenho pode ser degradado ao processar grandes arquivos PST. As seguintes sugestões ajudarão a melhorar o desempenho do seu aplicativo ao processar grandes arquivos.
Considere métodos que retornam
Iterable
ao percorrer pastas ou mensagens em um pst.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
for (FolderInfo folder : pst.getRootFolder().enumerateFolders())
for (MessageInfo messageInfo : folder.enumerateMessages()) {
// Faça algo com a mensagem
}
}
Prefira MessageInfo para acessar propriedades básicas da mensagem.
for (MessageInfo messageInfo : folder.enumerateMessages()) {
System.out.println("Assunto: " + messageInfo.getSubject());
System.out.println("Para: " + messageInfo.getDisplayTo());
System.out.println("Importância: " + messageInfo.getImportance());
System.out.println("Classe da Mensagem: " + messageInfo.getMessageClass());
}
Evite usar os métodos ExtractMessage ou EnumerateMapiMessages para todas as mensagens, a menos que você precise ter acesso a todas as propriedades.
Considere usar EnumerateMessagesEntryId para recuperar facilmente todos os IDs de mensagem contidos em uma pasta.
for (String id : folder.enumerateMessagesEntryId())
{
// Use o id para recuperar uma propriedade (extractProperty),
// extrair uma MapiMessage (extractMessage),
// extrair anexos da mensagem (extractAttachments),
// salvar msg em um stream (saveMessageToStream).
}
Considere usar ExtractProperty para ler uma única propriedade que está faltando em MessageInfo.
for (String msgId : folder.enumerateMessagesEntryId()) {
String transportMessageHeaders =
pst.extractProperty(org.apache.commons.codec.binary.Base64.decodeBase64(msgId),
KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()).getString();
}
Considere usar ExtractAttachments se apenas os anexos forem necessários.
for (String msgId : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
Use filtragem baseada em critérios de busca para obter as mensagens desejadas.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// Mensagens não lidas
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
MessageInfoCollection unread = folder.getContents(builder.getQuery());
}
}
Considere usar SaveMessageToStream se for necessário salvar mensagens do pst.
Em vez de usar:
for (String id : folder.enumerateMessagesEntryId()) {
MapiMessage msg = pst.extractMessage(id);
msg.save("message.msg");
}
Use:
for (String id : folder.enumerateMessagesEntryId()) {
try (OutputStream fos = new FileOutputStream("message.msg")) {
pst.saveMessageToStream(id, fos);
}
}