Büyük PST dosyalarıyla çalışmak

Büyük Personal Storage Table (PST) dosyalarının işlenmesi performansı düşürebilir ve bellek kullanımını artırabilir. Aspose.Email for Java, geliştiricilerin posta kutusu verilerine verimli bir şekilde erişmesini, işlem yapmasını ve yönetmesini sağlayan, sistem kaynaklarını aşırı yüklemeden çeşitli teknikler ve API’ler sunar.

Klasör ve Mesaj Gezinimi için Yinelemeli Yöntemleri Kullanın

Klasörler ve mesajlar arasında dolaşırken, döndüren yöntemleri tercih edin Iterable. Bu, bellek yükünü azaltır ve performansı artırır.

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

Temel Mesaj Özellikleri için MessageInfo kullanın

Yalnızca temel mesaj ayrıntılarına ihtiyacınız varsa, kullanın MessageInfo tam mesajı yüklemek yerine. Bu daha hızlıdır ve daha az bellek tüketir.

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

Gerekmedikçe Tam Mesajları Çıkarmağından Kaçının

Kullanmayın ExtractMessage veya EnumerateMapiMessages tüm özelliklere ihtiyacınız yoksa tüm mesajlar için yöntemler.

Bunun yerine, şunu düşünün:

a) Mesaj Kimliklerini Almak

Kullan enumerateMessagesEntryId bir klasördeki tüm mesaj kimliklerini almak için. Ardından özellikleri, mesajları veya ekleri seçerek çıkarabilirsiniz.

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) Tek Bir Özellik Çıkarma

Kullan ExtractProperty eğer sadece eksik bir özelliğe ihtiyacınız varsa 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) Yalnızca Ekleri Çıkarma

Yalnızca ekler gerekiyorsa, şunu kullanın ExtractAttachments.

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

Mesajları filtrelemek için Arama Kriteri Kullanın

Mesajları filtrelemek için kullanarak arama kriteri yüklenen mesaj sayısını azaltır ve performansı artırır.

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

Mesajları Akışa Kaydet

Mesajları tek tek çıkarmak ve kaydetmek yerine, şunu kullanın SaveMessageToStream daha iyi performans için.

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

Mümkün olduğunda Toplu Yöntemler Kullanın

İhtiyacınız olduğunda ekle veya sil birden çok öğe, tek tek işlemler yerine toplu yöntemleri tercih edin. Bu, yükü azaltır ve performansı artırır.