Trabajando con grandes archivos PST
Contents
[
Hide
]
El rendimiento puede verse degradado al procesar grandes archivos PST. Las siguientes sugerencias ayudarán a mejorar el rendimiento de su aplicación al procesar archivos grandes.
Considere métodos que devuelvan
Iterable
al recorrer carpetas o mensajes en un pst.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
for (FolderInfo folder : pst.getRootFolder().enumerateFolders())
for (MessageInfo messageInfo : folder.enumerateMessages()) {
// Hacer algo con el mensaje
}
}
Prefiera MessageInfo para acceder a las propiedades básicas del mensaje.
for (MessageInfo messageInfo : folder.enumerateMessages()) {
System.out.println("Asunto: " + messageInfo.getSubject());
System.out.println("Para: " + messageInfo.getDisplayTo());
System.out.println("Importancia: " + messageInfo.getImportance());
System.out.println("Clase de mensaje: " + messageInfo.getMessageClass());
}
Evite usar los métodos ExtractMessage o EnumerateMapiMessages para todos los mensajes a menos que necesite acceder a todas las propiedades.
Considere usar EnumerateMessagesEntryId para recuperar fácilmente todos los IDs de mensajes contenidos en una carpeta.
for (String id : folder.enumerateMessagesEntryId())
{
// Usar id para recuperar una propiedad (extractProperty),
// extraer un MapiMessage (extractMessage),
// extraer los archivos adjuntos del mensaje (extractAttachments),
// guardar el mensaje en un flujo (saveMessageToStream).
}
Considere usar ExtractProperty para leer una única propiedad que falta en 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 si solo se requieren los archivos adjuntos.
for (String msgId : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
Utilice el filtrado basado en criterios de búsqueda para obtener los mensajes que necesita.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// Mensajes no leídos
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
MessageInfoCollection unread = folder.getContents(builder.getQuery());
}
}
Considere usar SaveMessageToStream si es necesario guardar mensajes del pst.
En lugar 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);
}
}