Arbeta med stora PST‑filer

Bearbetning av stora Personal Storage Table (PST)-filer kan minska prestandan och öka minnesanvändningen. Aspose.Email för Java tillhandahåller flera tekniker och API:er som låter utvecklare komma åt, bearbeta och hantera brevlådedata effektivt utan att överbelasta systemresurserna.

Använd itererbara metoder för traversering av mappar och meddelanden

När du itererar genom mappar och meddelanden, föredra metoder som returnerar Iterable. Detta minskar minnesbelastningen och förbättrar prestandan.

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

Använd MessageInfo för grundläggande meddelandeegenskaper

Om du bara behöver grundläggande meddelandedetaljer, använd MessageInfo istället för att ladda hela meddelandet. Detta är snabbare och använder mindre minne.

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

Undvik att extrahera hela meddelanden om det inte är nödvändigt

Använd inte ExtractMessage eller EnumerateMapiMessages metoder för alla meddelanden om du inte behöver alla egenskaper.

Överväg istället:

a) Hämta meddelande‑ID

Använd enumerateMessagesEntryId för att hämta alla meddelande‑ID i en mapp. Du kan sedan selektivt extrahera egenskaper, meddelanden eller bilagor.

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) Extrahera en enskild egenskap

Använd ExtractProperty om du bara behöver en specifik egenskap som saknas i 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) Extrahera endast bilagor

Om endast bilagor behövs, använd ExtractAttachments.

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

Använd sökkriterier för att filtrera meddelanden

Filtrera meddelanden med hjälp av sök kriterier minskar antalet meddelanden som laddas och förbättrar prestanda.

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

Spara meddelanden till ström

Istället för att extrahera och spara meddelanden en åt gången, använd SaveMessageToStream för bättre prestanda.

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

Använd bulk‑metoder när det är möjligt

När du behöver lägga till eller radera flera objekt, föredra bulk‑metoder framför individuella operationer. Detta minskar overhead och förbättrar prestanda.