Läs PST‑filer och hämta information

Läs PST-filer och hämta information

Aspose.Email för .NET tillhandahåller ett API för att läsa Microsoft Outlook PST-filer. Du kan ladda en PST-fil från disk eller strömma den till en instans av PersonalStorage klass och hämta information om dess innehåll, exempelvis mappar, undermappar och meddelanden. API:et ger också möjlighet att inkludera sökmappar vid traversering efter meddelanden från PST-mapparna.

Läs in PST-fil

En Outlook PST-fil kan laddas i en instans av PersonalStorage klassen. Följande kodexempel visar hur du laddar PST-filen.

Visa mappinformation

Efter att PST-filen har lästs in i PersonalStorage klass, du kan få information om filens visningsnamn, rotmapp, undermappar och antal meddelanden. Följande kodexempel visar hur du visar PST-filens namn, mappar samt antalet meddelanden i mapparna.

Hämta endast användardefinierade mappar

PST/OST-filer kan innehålla mappar som skapats av en användare. Aspose.Email ger möjlighet att endast komma åt användardefinierade mappar genom att använda PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser egenskapen. Du kan sätta PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser egenskap till true för att endast få användardefinierade mappar. Följande kodexempel demonstrerar användningen av PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser för att hämta användardefinierade mappar.

Kontrollera om mappen är fördefinierad

När du öppnar och inspekterar mapparna i en PST (Personal Storage Table)-fil kan du kontrollera om varje mapp är av en fördefinierad mapptyp eller en undermapp till en fördefinierad mapptyp, och hämta information om varje mapp.

Den FolderInfo.GetPredefinedType(bool getForTopLevelParent) metod tillåter att kontrollera om en mapp kommer från StandardIpmFolder. Om parametern getForTopLevelParent är true returnerar metoden en StandardIpmFolder enum‑värde för överordnad rotmapp. Detta bestämmer om den aktuella mappen är en undermapp till en fördefinierad mapp. Om parametern getForTopLevelParent är false returneras en StandardIpmFolder enum‑värde för den aktuella mappen.

Följande kodexempel visar hur du implementerar denna funktion i ditt projekt:

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

Hämta föräldramappsinformation

Följande kodexempel visar hur du hämtar information om föräldramappen från MessageInfo.

Hämta undermapp via sökväg

Den FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) Metodöverlagring gör det möjligt att hämta en undermapp med det angivna namnet från den aktuella PST-mappen.

Metoden tar emot följande parametrar:

  • name - anger namnet på undermappen som ska hämtas.
  • ignoreCase - bestämmer om sökningen efter undermappens namn ska vara skiftlägeskänslig eller skiftlägesokänslig. Om den är satt till true blir sökningen skiftlägesokänslig, annars blir den skiftlägeskänslig.
  • handlePathSeparator - anger om det angivna mappnamnet ska behandlas som en sökväg om det innehåller omvända snedstreck. Om den är satt till true kommer metoden att tolka mappnamnet som en sökväg och försöka navigera till undermappen med hjälp av sökvägen. Om den är satt till false kommer metoden att behandla mappnamnet som ett enkelt namn och söka efter en undermapp med exakt namnmatchning.

Följande kodexempel visar hur du implementerar den här metoden i ditt projekt:

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-flöden och sökbara mappar

Standard RSS‑flödesmapp i PersonalStorage

Aspose.Email gör det möjligt att hämta en referens till den fördefinierade mappen som innehåller RSS-flöden. Detta kan vara användbart om du vill programatiskt komma åt och manipulera RSS-flöden lagrade i en Outlook PST-fil. Ge värdet RssFeeds till StandardIpmFolder enum.

Följande kodexempel visar hur man får en RSS‑flödesmapp.

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

För att lägga till en RSS‑flödesmapp, använd följande kodexempel:

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

Parsra sökbara mappar

En PST/OST kan innehålla sökbara mappar förutom den normala typen av mappar. Aspose.Email tillhandahåller FolderKind enumerator för att specificera meddelandena från sådana sökmapp med EnumerateFolders och GetSubFolders metoder. Följande kodexempel visar hur du parsar sökbara mappar.

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

PST-filtraverserings‑API

Traverserings‑API:et tillåter att extrahera alla PST‑objekt så långt som möjligt, utan att kasta undantag, även om viss data i originalfilen är korrupt. Följande steg visar hur du använder detta API.

Använd PersonalStorage konstruktor och Load metod istället för FromFile‑metoden.

Konstruktorn tillåter att definiera en återuppringningsmetod.

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

Laddnings- och traverseringsundantag kommer att vara tillgängliga via återuppringningsmetoden.

Den Load metoden returnerar ’true’ om filen har laddats framgångsrikt och vidare traversering är möjlig. Om en fil är korrupt och ingen traversering är möjlig, returneras ‘false’.

if (currentPst.Load(inputStream))

Detta möjliggör att öppna och traversera även korrupta PST-filer utan att kasta undantag. Undantag och korrupta objekt hanteras av återuppringningsmetoden.

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

Hämta objekts kategori­färger från PST-filer

Aspose.Email tillåter användare att hämta kategorinformation, inklusive namn och färger, från PST-filer. Kategoridata kan extraheras och matchas med enskilda PST‑objekt. Använd följande API‑medlemmar:

  • OutlookCategoryColor enum – Representerar färgen som är associerad med en kategori.
  • PstItemCategory klass – Tillhandahåller egenskaper för kategorinamn och färg.
  • GetCategories metod – Hämtar en lista med kategorier med deras namn och färger.

Följande kodexempel demonstrerar hur man hämtar alla tillgängliga kategorier från en PST-fil och matchar dem med en specifik e‑postmeddelande.

Hämta tillgängliga kategorier från PST

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

Matcha ett kategorinamn med dess färg

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