대용량 PST 파일 작업
대용량 개인 저장소 테이블(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);
}
}
가능하면 대량 메서드 사용
필요할 때마다 추가 또는 delete 다수의 항목에 대해 개별 작업보다 대량 메서드를 사용하는 것이 좋습니다. 이는 오버헤드를 줄이고 성능을 향상시킵니다.