PST‑Dateien lesen und Informationen abrufen
PST‑Dateien lesen und Informationen abrufen
Aspose.Email für .NET stellt eine API zum Lesen von Microsoft Outlook‑PST‑Dateien bereit. Sie können eine PST‑Datei von der Festplatte oder aus einem Stream in eine Instanz der PersonalStorage Klasse, um Informationen über deren Inhalt zu erhalten, z. B. Ordner, Unterordner und Nachrichten. Die API bietet außerdem die Möglichkeit, Suchordner beim Durchsuchen von Nachrichten aus den PST‑Ordnern einzubeziehen.
PST‑Datei laden
Eine Outlook‑PST‑Datei kann in einer Instanz der PersonalStorage Klasse. Das folgende Code‑Snippet zeigt, wie Sie die PST‑Datei laden.
Ordnerinformationen anzeigen
Nach dem Laden der PST‑Datei in die PersonalStorage Klasse, mit der Sie Informationen über den Anzeigenamen der Datei, den Stammordner, Unterordner und die Nachrichtenanzahl erhalten können. Das folgende Code‑Snippet zeigt, wie Sie den Namen der PST‑Datei, die Ordner und die Anzahl der Nachrichten in den Ordnern anzeigen.
Nur benutzerdefinierte Ordner abrufen
PST/OST‑Dateien können Ordner enthalten, die von einem Benutzer erstellt wurden. Aspose.Email bietet die Möglichkeit, nur benutzerdefinierte Ordner zuzugreifen, indem Sie die PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser Eigenschaft. Sie können die PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser Eigenschaft auf true setzen, um nur benutzerdefinierte Ordner zu erhalten. Das folgende Code‑Snippet demonstriert die Verwendung von PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser um benutzerdefinierte Ordner zu erhalten.
Prüfen, ob Ordner vordefiniert ist
Beim Öffnen und Untersuchen der Ordner einer PST‑Datei (Personal Storage Table) können Sie prüfen, ob jeder Ordner ein vordefinierter Ordnertyp oder ein Unterordner eines vordefinierten Ordnertyps ist, und die Informationen zu jedem Ordner erhalten.
Die FolderInfo.GetPredefinedType(bool getForTopLevelParent) Methode ermöglicht zu prüfen, ob ein Ordner aus StandardIpmFolder. Wenn der Parameter getForTopLevelParent true ist, gibt die Methode ein StandardIpmFolder Enum‑Wert für den übergeordneten Ordner der obersten Ebene. Dies bestimmt, ob der aktuelle Ordner ein Unterordner eines vordefinierten Ordners ist. Wenn der Parameter getForTopLevelParent false ist, wird ein StandardIpmFolder Enum‑Wert für den aktuellen Ordner.
Das folgende Codebeispiel zeigt, wie Sie diese Funktion in Ihr Projekt implementieren:
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("-----------------------------------");
}
}
Elternordnerinformationen abrufen
Das folgende Code‑Snippet zeigt, wie Sie Informationen zum übergeordneten Ordner abrufen können von MessageInfo.
Unterordner nach Pfad abrufen
Die FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) Eine Methodenüberladung ermöglicht es Ihnen, einen Unterordner mit dem angegebenen Namen aus dem aktuellen PST-Ordner abzurufen.
Die Methode akzeptiert die folgenden Parameter:
- name – gibt den Namen des abzurufenden Unterordners an.
- ignoreCase – bestimmt, ob die Suche nach dem Unterordnernamen Groß-/Kleinschreibung berücksichtigen soll. Wenn auf true gesetzt, ist die Suche nicht case-sensitive, andernfalls ist sie case-sensitive.
- handlePathSeparator – gibt an, ob der angegebene Ordnername als Pfad behandelt werden soll, wenn er Rückwärtsschrägstriche enthält. Wenn auf true gesetzt, interpretiert die Methode den Ordnernamen als Pfad und versucht, über den Pfad zum Unterordner zu navigieren. Wenn auf false gesetzt, behandelt die Methode den Ordnernamen als einfachen Namen und sucht nach einem Unterordner mit exakt übereinstimmendem Namen.
Das folgende Codebeispiel zeigt, wie Sie diese Methode in Ihrem Projekt implementieren:
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-Feeds und durchsuchbare Ordner
Standard‑RSS‑Feeds‑Ordner in PersonalStorage
Aspose.Email ermöglicht das Abrufen einer Referenz auf den vordefinierten Ordner, der RSS‑Feeds enthält. Das kann nützlich sein, wenn Sie programmgesteuert auf die in einer Outlook‑PST‑Datei gespeicherten RSS‑Feeds zugreifen und sie manipulieren möchten. Geben Sie den Wert RssFeeds an die StandardIpmFolder Enum.
Das folgende Code‑Beispiel zeigt, wie Sie einen RSS‑Feeds‑Ordner erhalten.
using (var pst = PersonalStorage.FromFile("my.pst", false))
{
var rssFolder = pst.GetPredefinedFolder(StandardIpmFolder.RssFeeds);
}
Um einen RSS‑Feeds‑Ordner hinzuzufügen, verwenden Sie das folgende Code‑Snippet:
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
var rssFolder = pst.CreatePredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}
Durchsuchen von durchsuchbaren Ordnern
Eine PST/OST kann neben den normalen Ordnern auch durchsuchbare Ordner enthalten. Aspose.Email stellt die FolderKind Enumerator zur Angabe der Nachrichten aus solchen Suchordnern mit EnumerateFolders und GetSubFolders Methoden. Das folgende Code‑Snippet zeigt, wie Sie durchsuchbare Ordner analysieren.
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‑Datei‑Traversierungs‑API
Die Traversal‑API ermöglicht das Extrahieren aller PST‑Elemente, soweit möglich, ohne Ausnahmen zu werfen, selbst wenn einige Daten der Originaldatei beschädigt sind. Die folgenden Schritte zeigen, wie diese API verwendet wird.
Verwenden PersonalStorage Konstruktor und Load Methode anstelle der FromFile‑Methode.
Der Konstruktor ermöglicht das Definieren einer Callback‑Methode.
using (var currentPst = new PersonalStorage((exception, itemId) => { /* Exception handling code. */ }))
Lade‑ und Durchlauf‑Ausnahmen stehen über die Callback‑Methode zur Verfügung.
Die Load Methode gibt ’true’ zurück, wenn die Datei erfolgreich geladen wurde und ein weiteres Durchlaufen möglich ist. Ist die Datei beschädigt und ein Durchlaufen nicht möglich, wird ‘false’ zurückgegeben.
if (currentPst.Load(inputStream))
Damit können selbst beschädigte PST‑Dateien geöffnet und traversiert werden, ohne Ausnahmen zu werfen. Ausnahmen und beschädigte Elemente werden von der Callback‑Methode behandelt.
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);
}
}
Kategorienfarben von Elementen aus PST‑Dateien abrufen
Aspose.Email ermöglicht es Benutzern, Kategoriedaten, einschließlich Namen und Farben, aus PST‑Dateien abzurufen. Kategoriedaten können extrahiert und mit einzelnen PST‑Elementen abgeglichen werden. Verwenden Sie die folgenden API‑Mitglieder:
- OutlookCategoryColor Enum – Stellt die mit einer Kategorie verbundene Farbe dar.
- PstItemCategory Klasse – Stellt Eigenschaften für Kategorienamen und Farbe bereit.
- GetCategories Methode – Ruft eine Liste von Kategorien mit ihren Namen und Farben ab.
Die folgenden Code‑Beispiele zeigen, wie alle verfügbaren Kategorien aus einer PST‑Datei abgerufen und mit denen abgeglichen werden, die einer bestimmten E‑Mail‑Nachricht zugeordnet sind.
Verfügbare Kategorien aus PST abrufen
using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
var categories = pst.GetCategories();
foreach(var category in categories)
{
Console.WriteLine(category);
}
}
Kategorie‑Name mit seiner Farbe abgleichen
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");
}
}
}