खराब PST/OST फ़ाइलें पढ़ें

खराब PST/OST फ़ाइलें पढ़ें

कभी-कभी कुछ समस्याओं के कारण PST/OST पढ़ना संभव नहीं होता। उदाहरण के लिए, कुछ डेटा ब्लॉक भ्रष्ट हो सकते हैं। ऐसे मामलों में, आमतौर पर मेथड को कॉल करने पर एक्सेप्शन उत्पन्न होते हैं। EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, आदि मेथड्स। लेकिन व्यक्तिगत संदेश या फ़ोल्डर स्टोरेज में अप्रभावित रह सकते हैं।

Aspose.Email उपयोगकर्ता आइटम पहचानकर्ताओं को पदानुक्रमित तरीके से खोज सकते हैं। आगे, आप पहचानकर्ताओं के माध्यम से आइटम निकाल सकते हैं। इस उद्देश्य के लिए, लाइब्रेरी निम्नलिखित मेथड्स प्रदान करती है:

नोट, लाभों के बावजूद, ऐसी क्षतिग्रस्त स्टोरेज हैं जिन्हें इन मेथड्स का उपयोग करके भी नहीं पढ़ा जा सकता।

निम्नलिखित कोड स्निपेट इन मेथड्स का उपयोग करके खराब PST/OST फ़ाइलें पढ़ने का प्रदर्शन करता है:

try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
    exploreCorruptedPst(pst, pst.getRootFolder().getEntryIdString());
}

public static void exploreCorruptedPst(PersonalStorage pst, String rootFolderId) {
    Iterable<String> messageIdList = pst.findMessages(rootFolderId);

    for (String messageId : messageIdList) {
        try {
            MapiMessage msg = pst.extractMessage(messageId);
            System.out.println("- " + msg.getSubject());
        } catch (Exception e) {
            System.out.println("Message reading error. Entry id: " + messageId);
        }
    }

    Iterable<String> folderIdList = pst.findSubfolders(rootFolderId);

    for (String subFolderId : folderIdList) {
        if (subFolderId != rootFolderId) {
            try {
                FolderInfo subfolder = pst.getFolderById(subFolderId);
                System.out.println(subfolder.getDisplayName());
            } catch (Exception e) {
                System.out.println("Message reading error. Entry id: " + subFolderId);
            }

            exploreCorruptedPst(pst, subFolderId);
        }
    }
}

खराब फ़ाइलों से PST आइटम निकालें

ट्रैवर्सल API आपको सभी PST आइटम जितना संभव हो उतना निकालने की अनुमति देती है, बिना एक्सेप्शन फेंके, भले ही मूल फ़ाइल का कुछ डेटा भ्रष्ट हो।

उपयोग करें PersonalStorage(TraversalExceptionsCallback callback) कन्स्ट्रक्टर और load(String fileName) मेथड के बजाय fromFile विधि।

कंस्ट्रक्टर आपको कॉलबैक मेथड परिभाषित करने की अनुमति देता है।

TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
    @Override
    public void invoke(TraversalAsposeException exception, String itemId) {
        /* Exception handling  code. */
    }
};

try (PersonalStorage pst = new PersonalStorage(exceptionsCallback)) { }

लोडिंग और ट्रैवर्सल अपवाद कॉलबैक मेथड के माध्यम से उपलब्ध होंगे।

लोड मेथड तब ’true’ लौटाता है यदि फ़ाइल सफलतापूर्वक लोड हो गई हो और आगे का ट्रैवर्सल संभव हो। यदि फ़ाइल भ्रष्ट है और ट्रैवर्सल संभव नहीं है, तो ‘false’ लौटाया जाता है।

if (currentPst.load(inputStream))

निम्नलिखित कोड उदाहरण दर्शाता है कि प्रोेजेक्ट में PST फ़ाइल ट्रैवर्सल API को कैसे लागू किया जाए:

public static void main(String[] args) {
    TraversalExceptionsCallback exceptionsCallback = new TraversalExceptionsCallback() {
        @Override
        public void invoke(TraversalAsposeException exception, String itemId) {
            /* Exception handling  code. */
        }
    };

    try (PersonalStorage pst = new PersonalStorage(exceptionsCallback)) {
        if (pst.load("test.pst")) {
            getAllMessages(pst, pst.getRootFolder());
        }
    }
}

private static void getAllMessages(PersonalStorage pst, FolderInfo folder) {
    for (String messageEntryId : folder.enumerateMessagesEntryId()) {
        MapiMessage message = pst.extractMessage(messageEntryId);
    }
    for (FolderInfo subFolder : folder.getSubFolders()) {
        getAllMessages(pst, subFolder);
    }
}