Odczyt plików PST i pobieranie informacji
Odczytaj pliki PST i pobierz informacje
Aspose.Email dla .NET udostępnia API do odczytu plików Microsoft Outlook PST. Możesz wczytać plik PST z dysku lub strumienia do instancji klasy PersonalStorage klasa umożliwiająca uzyskanie informacji o jej zawartości, np. folderach, podfolderach i wiadomościach. API zapewnia również możliwość uwzględniania folderów wyszukiwania podczas przeglądania wiadomości z folderów PST.
Załaduj plik PST
Plik Outlook PST może zostać wczytany w instancji klasy PersonalStorage klasa. Poniższy fragment kodu pokazuje, jak wczytać plik PST.
Wyświetl informacje o folderach
Po załadowaniu pliku PST w PersonalStorage klasa, dzięki której możesz uzyskać informacje o nazwie wyświetlanej pliku, folderze głównym, podfolderach oraz liczbie wiadomości. Poniższy fragment kodu pokazuje, jak wyświetlić nazwę pliku PST, foldery oraz liczbę wiadomości w folderach.
Uzyskaj tylko foldery zdefiniowane przez użytkownika
Pliki PST/OST mogą zawierać foldery utworzone przez użytkownika. Aspose.Email umożliwia dostęp wyłącznie do folderów zdefiniowanych przez użytkownika przy użyciu PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser właściwości. Możesz ustawić PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser właściwość na true, aby uzyskać tylko foldery zdefiniowane przez użytkownika. Poniższy fragment kodu demonstruje użycie PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser aby uzyskać foldery zdefiniowane przez użytkownika.
Sprawdź, czy folder jest predefiniowany
Podczas otwierania i przeglądania folderów w pliku PST (Personal Storage Table) możesz sprawdzić, czy każdy folder jest wstępnie zdefiniowanym typem folderu lub podfolderem wstępnie zdefiniowanego typu folderu oraz uzyskać informacje o każdym folderze.
Ten FolderInfo.GetPredefinedType(bool getForTopLevelParent) metoda pozwala sprawdzić, czy folder jest z StandardIpmFolder. Jeśli parametr getForTopLevelParent jest true, metoda zwraca StandardIpmFolder wartość wyliczeniowa dla folderu nadrzędnego najwyższego poziomu. Określa, czy bieżący folder jest podfolderem zdefiniowanego folderu. Jeśli parametr getForTopLevelParent jest false, zwraca StandardIpmFolder wartość wyliczeniowa dla bieżącego folderu.
Poniższy przykład kodu pokazuje, jak zaimplementować tę funkcję w swoim projekcie:
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("-----------------------------------");
}
}
Pobierz informacje o folderze nadrzędnym
Poniższy fragment kodu pokazuje, jak pobrać informacje o folderze nadrzędnym z MessageInfo.
Pobierz podfolder według ścieżki
Ten FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) Przeciążenie metody umożliwi pobranie podfolderu o określonej nazwie z bieżącego folderu PST.
Metoda przyjmuje następujące parametry:
- name – określa nazwę podfolderu do pobrania.
- ignoreCase – określa, czy wyszukiwanie nazwy podfolderu ma być rozróżniać wielkość liter. Jeśli ustawione na true, wyszukiwanie będzie niepodatne na wielkość liter, w przeciwnym razie będzie rozróżniać.
- handlePathSeparator – określa, czy podana nazwa folderu ma być traktowana jako ścieżka, jeśli zawiera odwrotne ukośniki. Jeśli ustawiona na true, metoda będzie interpretować nazwę folderu jako ścieżkę, próbując przejść do podfolderu przy użyciu tej ścieżki. Jeśli ustawiona na false, metoda potraktuje nazwę folderu jako prostą nazwę, szukając podfolderu o dokładnie takiej samej nazwie.
Poniższy przykład kodu pokazuje, jak zaimplementować tę metodę w projekcie:
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.
Kanały RSS i foldery przeszukiwalne
Standardowy folder RSS Feeds w PersonalStorage
Aspose.Email umożliwia uzyskanie odniesienia do wstępnie zdefiniowanego folderu przechowującego kanały RSS. Może to być przydatne, jeśli chcesz programowo uzyskać dostęp i manipulować kanałami RSS przechowywanymi w pliku Outlook PST. Przypisz wartość RssFeeds do StandardIpmFolder enumeracja.
Poniższy przykład kodu pokazuje, jak uzyskać folder RSS Feeds.
using (var pst = PersonalStorage.FromFile("my.pst", false))
{
var rssFolder = pst.GetPredefinedFolder(StandardIpmFolder.RssFeeds);
}
Aby dodać folder RSS Feeds, użyj poniższego fragmentu kodu:
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
var rssFolder = pst.CreatePredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}
Parsowanie folderów możliwych do przeszukania
Plik PST/OST może zawierać foldery przeszukiwalne oprócz zwykłych folderów. Aspose.Email zapewnia FolderKind enumerator do określania wiadomości z takich folderów wyszukiwania przy użyciu EnumerateFolders i GetSubFolders metody. Poniższy fragment kodu pokazuje, jak parsować foldery przeszukiwalne.
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 przeglądania plików PST
API przeglądania umożliwia wyodrębnianie wszystkich elementów PST w miarę możliwości, bez zgłaszania wyjątków, nawet jeśli niektóre dane oryginalnego pliku są uszkodzone. Poniższe kroki pokazują, jak używać tego API.
Użyj PersonalStorage konstruktor oraz Load metoda zamiast metody FromFile.
Konstruktor umożliwia zdefiniowanie metody zwrotnej.
using (var currentPst = new PersonalStorage((exception, itemId) => { /* Exception handling code. */ }))
Wyjątki podczas ładowania i przeglądania będą dostępne poprzez metodę zwrotną.
Ten Load metoda zwraca ’true’, jeśli plik został pomyślnie załadowany i dalsze przeglądanie jest możliwe. Jeśli plik jest uszkodzony i przeglądanie nie jest możliwe, zwracane jest ‘false’.
if (currentPst.Load(inputStream))
Umożliwia to otwieranie i przeglądanie nawet uszkodzonych plików PST bez wyrzucania wyjątków. Wyjątki i uszkodzone elementy będą obsługiwane przez metodę zwrotną.
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);
}
}
Pobierz kolory kategorii elementów z plików PST
Aspose.Email umożliwia użytkownikom pobieranie informacji o kategoriach, w tym nazw i kolorów, z plików PST. Dane kategorii mogą być wyodrębniane i dopasowywane do poszczególnych elementów PST. Skorzystaj z następujących członków API:
- OutlookCategoryColor enum – reprezentuje kolor powiązany z kategorią.
- PstItemCategory klasa – zapewnia właściwości dla nazwy kategorii i koloru.
- GetCategories metoda – pobiera listę kategorii z ich nazwami i kolorami.
Poniższe przykłady kodu pokazują, jak pobrać wszystkie dostępne kategorie z pliku PST i dopasować je do konkretnej wiadomości e-mail.
Pobierz dostępne kategorie z PST
using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
var categories = pst.GetCategories();
foreach(var category in categories)
{
Console.WriteLine(category);
}
}
Dopasuj nazwę kategorii do jej koloru
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");
}
}
}