대용량 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 다수의 항목에 대해 개별 작업보다 대량 메서드를 사용하는 것이 좋습니다. 이는 오버헤드를 줄이고 성능을 향상시킵니다.