خواندن فایل‌های PST/OST خراب

خواندن فایل‌های PST/OST خراب

در برخی موارد، فایل PST یا OST ممکن است به دلیل خرابی یا آسیب قابل دسترسی نباشد. در این وضعیت، Outlook ممکن است نتواند فایل را باز کند و بازیابی ایمیل‌های مهم و سایر داده‌های صندوق‌پست دشوار می‌شود.

Aspose.Email یک API فراهم می‌کند که به شما اجازه می‌دهد با استفاده از شناسه‌های پیام و پوشه، پیام‌های سالم را از یک فایل PST خراب اسکن و استخراج کنید.

متدهای زیر از PersonalStorage کلاس‌ها برای بازیابی داده‌ها از یک فایل PST خراب ضروری هستند:

  • دریافت شناسه‌های پیام و پوشه:

    find_messages(parent_entry_id) - فهرستی از شناسه‌های پیام‌ها را در یک پوشهٔ مشخص بازیابی می‌کند.

    find_subfolders(parent_entry_id) - فهرستی از شناسه‌های زیرپوشه‌ها را در یک پوشهٔ مشخص به‌دست می‌آورد.

  • دسترسی به پیام‌ها و پوشه‌ها با استفاده از شناسه‌هایشان:

    extract_message(entry_id) - یک پیام را از فایل PST با استفاده از شناسهٔ ورودی آن استخراج می‌کند.

    get_folder_by_id(entry_id) - یک پوشه را از فایل PST با استفاده از شناسهٔ ورودی آن بازیابی می‌کند.

نمونه کد زیر نشان می‌دهد چگونه در یک فایل PST که ممکن است خراب باشد مرور کنید، پیام‌های سالم را استخراج کنید و زیرپوشه‌ها را بررسی کنید:

import aspose.email as ae

def explore_corrupted_pst(pst, root_folder_id):
    message_id_list = pst.find_messages(root_folder_id)

    for message_id in message_id_list:
        try:
            msg = pst.extract_message(message_id)
            print("- " + msg.subject)
        except Exception as e:
            print("Message reading error. Entry id: " + message_id)

    folder_id_list = pst.find_subfolders(root_folder_id)

    for sub_folder_id in folder_id_list:
        if sub_folder_id != root_folder_id:
            try:
                subfolder = pst.get_folder_by_id(sub_folder_id)
                print(subfolder.display_name)
            except Exception as e:
                print("Message reading error. Entry id: " + sub_folder_id)

            explore_corrupted_pst(pst, sub_folder_id)


pst = ae.storage.pst.PersonalStorage.from_file("target.pst")

explore_corrupted_pst(pst, pst.root_folder.entry_id_string)