العمل مع ملفات PST الكبيرة

معالجة ملفات جدول التخزين الشخصي (PST) الكبيرة يمكن أن تقلل من الأداء وتزيد من استهلاك الذاكرة. توفر Aspose.Email for Java عدة تقنيات وواجهات برمجة تطبيقات تمكن المطورين من الوصول إلى بيانات صندوق البريد ومعالجتها وإدارتها بكفاءة دون تحميل موارد النظام.

استخدم طرق قابلة للتكرار لتصفح المجلدات والرسائل

عند التكرار عبر المجلدات والرسائل، يفضل استخدام الطرق التي تُعيد 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);
    }
}

استخدم الأساليب الجماعية عندما يكون ذلك ممكنًا

كلما احتجت إلى إضافة أو حذف عند التعامل مع عناصر متعددة، يُفضَّل استخدام الأساليب الجماعية بدلاً من العمليات الفردية. هذا يقلل من الحمل الزائد ويحسن الأداء.