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.