Čtení souborů PST a získání informací

Čtení PST souborů a získávání informací

Aspose.Email pro .NET poskytuje API pro čtení souborů Microsoft Outlook PST. Můžete načíst soubor PST z disku nebo streamu do instance třídy PersonalStorage třída a získat informace o jejím obsahu, například složky, podsložky a zprávy. API také poskytuje možnost zahrnout vyhledávací složky při procházení zpráv ze složek PST.

Načíst PST soubor

Soubor Outlook PST může být načten v instanci třídy PersonalStorage třída. Následující ukázka kódu vám ukazuje, jak načíst soubor PST.

Zobrazení informací o složkách

Po načtení PST souboru v PersonalStorage třída, můžete získat informace o zobrazovaném názvu souboru, kořenové složce, podsložkách a počtu zpráv. Následující úryvek kódu ukazuje, jak zobrazit název PST souboru, složky a počet zpráv ve složkách.

Získat pouze uživatelem definované složky

Soubory PST/OST mohou obsahovat složky vytvořené uživatelem. Aspose.Email poskytuje možnost přístupu pouze k uživatelem definovaným složkám pomocí PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser vlastnosti. Můžete nastavit PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser vlastnost na true, aby se získaly pouze uživatelem definované složky. Následující úryvek kódu demonstruje použití PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser pro získání uživatelem definovaných složek.

Zkontrolovat, zda je složka předdefinovaná

Při otevírání a prohlížení složek v souboru PST (Personal Storage Table) můžete zkontrolovat, zda je každá složka předdefinovaného typu nebo podsložkou předdefinovaného typu, a získat informace o každé složce.

The FolderInfo.GetPredefinedType(bool getForTopLevelParent) metoda umožňuje zkontrolovat, zda je složka z StandardIpmFolder. Pokud je parametr getForTopLevelParent true, metoda vrací StandardIpmFolder enum hodnota pro nadřazenou složku nejvyšší úrovně. Toto určuje, zda je aktuální složka podsložkou předdefinované složky. Pokud je parametr getForTopLevelParent false, vrátí StandardIpmFolder enum hodnota pro aktuální složku.

Následující ukázka kódu ukazuje, jak implementovat tuto funkci do vašeho projektu:

PersonalStorage.FromFile("my.pst"))
        {
            FolderInfoCollection folders = pst.RootFolder.GetSubFolders();

            foreach (FolderInfo folder in folders)
            {
                Console.WriteLine($"Folder: {folder.DisplayName}");
                Console.WriteLine($"Is predefined: {folder.GetPredefinedType(false) != StandardIpmFolder.Unspecified}");
                Console.WriteLine("-----------------------------------");
            }
        }

Získat informace o nadřazené složce

Následující úryvek kódu ukazuje, jak získat informace o nadřazené složce z MessageInfo.

Získat podsložku podle cesty

The FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) Přetížení metody vám umožní získat podsložku se zadaným názvem z aktuální PST složky.

Metoda přijímá následující parametry:

  • name – určuje název podsložky, která má být získána.
  • ignoreCase – určuje, zda má být hledání názvu podsložky rozlišovat velká a malá písmena. Pokud je nastaveno na true, hledání nebude rozlišovat velikost písmen, jinak bude rozlišovat.
  • handlePathSeparator – určuje, zda má být zadaný název složky považován za cestu, pokud obsahuje zpětná lomítka. Pokud je nastaveno na true, metoda bude interpretovat název složky jako cestu a pokusí se přejít do podsložky pomocí této cesty. Pokud je nastaveno na false, metoda bude název složky považovat za jednoduchý název a hledat podsložku s přesnou shodou názvu.

Níže uvedený ukázkový kód demonstruje, jak implementovat tuto metodu ve vašem projektu:

var folder = pst.RootFolder.GetSubFolder(@"Inbox\Reports\Jan", true, true);
In this sample, the method will return a Jan named folder that is located at the Inbox\Reports\ path relative to the root folder.

RSS kanály a prohledávatelné složky

Standardní složka RSS Feeds v PersonalStorage

Aspose.Email umožňuje získat odkaz na předdefinovanou složku, která obsahuje RSS kanály. To může být užitečné, pokud chcete programově přistupovat k RSS kanálům uloženým v souboru Outlook PST a manipulovat s nimi. Přiřaďte hodnotu RssFeeds k StandardIpmFolder enum.

Následující příklad kódu ukazuje, jak získat složku RSS Feeds.

using (var pst = PersonalStorage.FromFile("my.pst", false))
{
    var rssFolder = pst.GetPredefinedFolder(StandardIpmFolder.RssFeeds);
}

Pro přidání složky RSS Feeds použijte následující úryvek kódu:

using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
    var rssFolder = pst.CreatePredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}

Parsování prohledávatelných složek

Soubor PST/OST může obsahovat vyhledávací složky kromě běžných typů složek. Aspose.Email poskytuje FolderKind enumerátor pro specifikaci zpráv z takových vyhledávacích složek s EnumerateFolders a GetSubFolders metody. Následující úryvek kódu ukazuje, jak parsovat prohledávatelné složky.

using (PersonalStorage pst = PersonalStorage.FromFile("my.pst"))
        {
            FolderInfoCollection folders = pst.RootFolder.GetSubFolders(FolderKind.Search | FolderKind.Normal);

            // Browse through each folder to display folder name and number of messages
            foreach (FolderInfo folder in folders)
            {
                Console.WriteLine($"Folder: {folder.DisplayName}");

                FolderInfoCollection subFolders = folder.GetSubFolders(FolderKind.Search | FolderKind.Normal);
                foreach (FolderInfo subFolder in subFolders)
                {
                    Console.WriteLine($"Sub-folder: {subFolder.DisplayName}");
                }
            }
        }

API pro procházení PST souboru

API pro procházení umožňuje extrahovat všechny položky PST, co nejvíce, aniž by vyhazovalo výjimky, i když jsou některá data původního souboru poškozena. Následující kroky ukazují, jak toto API použít.

Použijte PersonalStorage konstruktor a Load metoda místo metody FromFile.

Konstruktor umožňuje definovat metodu zpětného volání.

using (var currentPst = new PersonalStorage((exception, itemId) => { /* Exception handling  code. */ }))

Výjimky při načítání a procházení budou k dispozici prostřednictvím zpětného volání.

The Load metoda vrací ’true’, pokud byl soubor úspěšně načten a další procházení je možné. Pokud je soubor poškozený a procházení není možné, vrací se ‘false’.

if (currentPst.Load(inputStream))

To umožňuje otevřít a procházet i poškozené PST soubory, aniž by se vyhazovaly výjimky. A výjimky a poškozené položky budou zpracovány metodou zpětného volání.

using (PersonalStorage pst = new PersonalStorage((exception, itemId) => { /* Exception handling  code. */ }))
{
    if (pst.Load(@"test.pst"))
    {
        GetAllMessages(pst, pst.RootFolder);
    }
}

private static void GetAllMessages(PersonalStorage pst, FolderInfo folder)
{
    foreach (var messageEntryId in folder.EnumerateMessagesEntryId())
    {
        MapiMessage message = pst.ExtractMessage(messageEntryId);
    }
    foreach (var subFolder in folder.GetSubFolders())
    {
        GetAllMessages(pst, subFolder);
    }
}

Získat barvy kategorií položek ze souborů PST

Aspose.Email umožňuje uživatelům získat informace o kategoriích, včetně názvů a barev, ze souborů PST. Data kategorií lze extrahovat a přiřadit k jednotlivým položkám PST. Použijte následující členy API:

Následující ukázky kódu demonstrují, jak získat všechny dostupné kategorie ze souboru PST a přiřadit ty, které jsou spojeny s konkrétní e‑mailovou zprávou.

Získat dostupné kategorie z PST

using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
   var categories = pst.GetCategories();
   
   foreach(var category in categories)
   {
       Console.WriteLine(category);
   }
}

Přiřadit název kategorie k její barvě

using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
    // Get all categories from the PST
    var availableCategories = pst.GetCategories();
    
    // Extract a message from the PST and retrieve the list of category names for the message
    var messageCategoryList = FollowUpManager.GetCategories(pst.ExtractMessage(messageInfo));
    
    // Iterate through each category in the message and match it with the PST category list
    foreach (var messageCategory in messageCategoryList)
    {
        var category = availableCategories.Find(c => c.Name.Equals(messageCategory, StringComparison.OrdinalIgnoreCase));

        if (category != null)
        {
            // Print the category name and its associated color
            Console.WriteLine(category);
        }
        else
        {
            Console.WriteLine($"Category: {messageCategory}, Color: Not found");
        }
    }
}