Práce s velkými soubory PST

Zpracování velkých souborů Personal Storage Table (PST) může snížit výkon a zvýšit využití paměti. Aspose.Email pro Java poskytuje několik technik a rozhraní API, které vývojářům umožňují efektivně přistupovat k datům poštovní schránky, zpracovávat je a spravovat je, aniž by přetížily systémové zdroje.

Používejte iterovatelné metody pro procházení složek a zpráv

Při procházení složek a zpráv preferujte metody, které vracejí Iterable. Toto snižuje nároky na paměť a zvyšuje výkon.

try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
    for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
        for (MessageInfo messageInfo : folder.enumerateMessages()) {
            // Process message
        }
    }
}

Použijte MessageInfo pro základní vlastnosti zprávy

Pokud potřebujete pouze základní podrobnosti zprávy, použijte MessageInfo místo načtení celé zprávy. Je to rychlejší a spotřebuje méně paměti.

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());
}

Vyhněte se extrahování celých zpráv, pokud to není nutné

Nevyužívejte ExtractMessage nebo EnumerateMapiMessages metody pro všechny zprávy, pokud nepotřebujete všechny vlastnosti.

Místo toho zvažte:

a) Získání ID zpráv

Použijte enumerateMessagesEntryId pro získání všech ID zpráv ve složce. Poté můžete selektivně extrahovat vlastnosti, zprávy nebo přílohy.

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) Extrahování jedné vlastnosti

Použijte ExtractProperty pokud potřebujete pouze konkrétní vlastnost chybějící v 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) Extrahování pouze příloh

Pokud jsou potřeba pouze přílohy, použijte ExtractAttachments.

for (String msgId : folder.enumerateMessagesEntryId()) {
    MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}

Použijte kritéria vyhledávání k filtrování zpráv

Filtrování zpráv pomocí kritéria vyhledávání snižuje počet načtených zpráv a zlepšuje výkon.

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());
    }
}

Ukládat zprávy do streamu

Místo extrahování a ukládání zpráv po jedné použijte SaveMessageToStream pro lepší výkon.

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

Používejte hromadné metody, kdykoli je to možné

Kdykoli potřebujete přidat nebo smazat více položek, upřednostňujte hromadné metody před jednotlivými operacemi. Tím se snižuje zátěž a zvyšuje výkon.