读取 PST 文件并检索信息
读取 PST 文件并检索信息
Aspose.Email for .NET 提供了读取 Microsoft Outlook PST 文件的 API。您可以从磁盘或流中加载 PST 文件到以下类的实例中: PersonalStorage 类,用于获取其内容信息,例如文件夹、子文件夹和消息。API 还提供在遍历 PST 文件夹中的消息时包含搜索文件夹的功能。
加载 PST 文件
可以在以下类的实例中加载 Outlook PST 文件: PersonalStorage 类。以下代码片段展示了如何加载 PST 文件。
显示文件夹信息
在加载 PST 文件后, PersonalStorage 类,可获取文件显示名称、根文件夹、子文件夹及消息数量等信息。以下代码片段展示了如何显示 PST 文件的名称、文件夹以及文件夹中的消息数量。
仅获取用户定义的文件夹
PST/OST 文件可能包含用户创建的文件夹。Aspose.Email 提供使用以下方式仅访问用户自定义文件夹的能力 PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser 属性。您可以设置 PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser 属性设为 true 可仅获取用户自定义文件夹。以下代码片段演示了如何使用 PersonalStorageQueryBuilder.OnlyFoldersCreatedByUser 以获取用户自定义文件夹。
检查文件夹是否预定义
在打开并检查 PST(个人存储表)文件中的文件夹时,您可以检查每个文件夹是预定义文件夹类型还是预定义文件夹类型的子文件夹,并获取每个文件夹的信息。
该 FolderInfo.GetPredefinedType(bool getForTopLevelParent) 方法允许检查文件夹是否来自 StandardIpmFolder。如果 getForTopLevelParent 参数为 true,方法返回一个 StandardIpmFolder 顶层父文件夹的枚举值。它决定当前文件夹是否是预定义文件夹的子文件夹。如果 getForTopLevelParent 参数为 false,则返回一个 StandardIpmFolder 当前文件夹的枚举值。
以下代码示例展示了如何在项目中实现此功能:
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("-----------------------------------");
}
}
检索父文件夹信息
以下代码片段展示了如何从中检索父文件夹信息 MessageInfo.
通过路径检索子文件夹
该 FolderInfo.GetSubFolder(string name, bool ignoreCase, bool handlePathSeparator) 方法重载将使您能够从当前 PST 文件夹中检索具有指定名称的子文件夹。
该方法接受以下参数:
- name - 指定要检索的子文件夹名称。
- ignoreCase - 决定子文件夹名称的搜索是区分大小写还是不区分大小写。如果设置为 true,搜索将不区分大小写;否则,搜索将区分大小写。
- handlePathSeparator - 指定当文件夹名称包含反斜杠时,是否应将其视为路径。如果设置为 true,方法将把文件夹名称解释为路径,尝试使用该路径导航到子文件夹。如果设置为 false,方法将把文件夹名称视为普通名称,搜索具有完全匹配名称的子文件夹。
以下代码示例演示了如何在项目中实现此方法:
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 订阅和可搜索文件夹
PersonalStorage 中的标准 RSS Feeds 文件夹
Aspose.Email 能够检索保存 RSS 源的预定义文件夹的引用。如果您希望以编程方式访问和操作存储在 Outlook PST 文件中的 RSS 源,这将非常有用。将 RssFeeds 的值传递给 StandardIpmFolder 枚举。
以下代码示例展示了如何获取 RSS Feeds 文件夹。
using (var pst = PersonalStorage.FromFile("my.pst", false))
{
var rssFolder = pst.GetPredefinedFolder(StandardIpmFolder.RssFeeds);
}
要添加 RSS Feeds 文件夹,请使用以下代码片段:
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
var rssFolder = pst.CreatePredefinedFolder("RSS Feeds", StandardIpmFolder.RssFeeds);
}
解析可搜索文件夹
PST/OST 除普通文件夹外,还可能包含可搜索文件夹。Aspose.Email 提供了 FolderKind 枚举器,用于指定此类搜索文件夹中的消息,使用 EnumerateFolders 和 GetSubFolders 方法。以下代码片段展示了如何解析可搜索文件夹。
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 文件遍历 API
遍历 API 允许尽可能提取所有 PST 项目,即使原始文件的部分数据已损坏,也不会抛出异常。以下步骤展示了如何使用此 API。
使用 PersonalStorage 构造函数和 Load 方法代替 FromFile 方法。
构造函数允许定义回调方法。
using (var currentPst = new PersonalStorage((exception, itemId) => { /* Exception handling code. */ }))
加载和遍历期间的异常将通过回调方法提供。
该 Load 如果文件成功加载且可以继续遍历,方法返回 ’true’。如果文件已损坏且无法遍历,则返回 ‘false’。
if (currentPst.Load(inputStream))
这允许在不抛出异常的情况下打开和遍历即使已损坏的 PST 文件。异常和损坏的项目将由回调方法处理。
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);
}
}
从 PST 文件检索项目类别颜色
Aspose.Email 允许用户从 PST 文件检索类别信息,包括名称和颜色。可以提取类别数据并与各个 PST 项匹配。使用以下 API 成员:
- OutlookCategoryColor 枚举 - 表示类别关联的颜色。
- PstItemCategory 类 - 提供类别名称和颜色的属性。
- GetCategories 方法 - 检索包含名称和颜色的类别列表。
以下代码示例演示了如何从 PST 文件检索所有可用类别并匹配与特定电子邮件关联的类别。
从 PST 检索可用类别
using (var pst = PersonalStorage.FromFile("mailbox.pst"))
{
var categories = pst.GetCategories();
foreach(var category in categories)
{
Console.WriteLine(category);
}
}
将类别名称与其颜色匹配
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");
}
}
}