کار با فایل‌های PST بزرگ

پردازش فایل‌های بزرگ جدول ذخیره‌سازی شخصی (PST) می‌تواند عملکرد را کاهش داده و مصرف حافظه را افزایش دهد. Aspose.Email برای Java چندین تکنیک و API ارائه می‌دهد که به توسعه‌دهندگان امکان دسترسی، پردازش و مدیریت داده‌های صندوق پستی را به‌صورت کارآمد فراهم می‌کند بدون اینکه منابع سیستم بارگذاری بیش از حد شوند.

از روش‌های قابل تکرار برای پیمایش پوشه‌ها و پیام‌ها استفاده کنید

هنگام مرور پوشه‌ها و پیام‌ها، روش‌هایی که مقدار برمی‌گردانند را ترجیح دهید 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 روش‌ها برای همه پیام‌ها مگر اینکه به همه ویژگی‌ها نیاز داشته باشید.

در عوض، در نظر بگیرید:

ا) بازیابی شناسه‌های پیام

استفاده کنید enumerateMessagesEntryId برای دریافت تمام شناسه‌های پیام در یک پوشه. سپس می‌توانید به‌صورت انتخابی ویژگی‌ها، پیام‌ها یا پیوست‌ها را استخراج کنید.

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).
}

ب) استخراج یک ویژگی منفرد

استفاده کنید 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();
}

ج) استخراج فقط پیوست‌ها

اگر فقط پیوست‌ها مورد نیاز است، از 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);
    }
}

در صورت امکان از روش‌های انبوه استفاده کنید

هر زمان که نیاز داشته باشید به افزودن یا حذف آیتم‌های متعدد، به‌جای عملیات‌های تک‌تک از روش‌های انبوه استفاده کنید. این کار بار پردازشی را کاهش داده و عملکرد را بهبود می‌بخشد.