Bozuk PST/OST dosyalarını okuyun

Bozuk PST/OST dosyalarını okuyun

Bazen bazı sorunlar nedeniyle PST/OST okunamayebilir. Örneğin, bazı veri blokları bozulmuş olabilir. Böyle durumlarda, yöntemi çağırırken genellikle istisnalar ortaya çıkar. EnumerateFolders, EnumerateMessages, GetContents, GetSubfolders, vb. yöntemler. Ancak bireysel mesajlar veya klasörler depolamada zarar görmemiş olabilir.

Aspose.Email kullanıcıları öğe kimliklerini hiyerarşik bir şekilde bulabilir. Ayrıca, kimliklere göre öğeleri çıkarabilirsiniz. Bu amaçla kütüphane aşağıdaki yöntemleri sunar:

Not, avantajlara rağmen, bu yöntemlerle bile okunamayan bozuk depolamalar mevcuttur.

Aşağıdaki kod snippet’i, bu yöntemlerin bozuk PST/OST dosyalarını okumak için kullanımını gösterir:

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

Bozuk Dosyalardan PST Öğelerini Çıkarın

Gezi API’si, orijinal dosyanın bazı verileri bozuk olsa bile, istisna fırlatmadan mümkün olduğunca tüm PST öğelerini çıkarmaya olanak tanır.

Kullan PersonalStorage(TraversalExceptionsCallback callback) yapıcı ve load(String fileName) metodu yerine fromFile metod.

Yapıcı, bir geri arama yöntemi tanımlamayı sağlar.

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

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

Yükleme ve dolaşım istisnaları geri arama yöntemi aracılığıyla erişilebilir olacak.

load yöntemi, dosya başarıyla yüklendiyse ve daha ileri gezinme mümkünse ’true’ döndürür. Dosya bozuksa ve gezinme mümkün değilse, ‘false’ döndürülür.

if (currentPst.load(inputStream))

Aşağıdaki kod örneği, PST dosyası gezinme API’sinin bir projeye nasıl uygulanacağını gösterir:

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