PST(個人存儲表) 是一種存儲文件格式,供不同的 Microsoft 程序使用,例如 MS Outlook、Exchange 和 Windows Messaging。 PST 文件能夠存儲消息、聯繫人、日曆、事件等。在某些情況下,您可能需要解析 PST 文件並以編程方式從中提取數據。為此,本文介紹瞭如何使用 C# .NET 讀取 MS Outlook PST 文件。特別是,您將學習如何從 PST 文件中提取文件夾信息、閱讀電子郵件和獲取聯繫人。
.NET API 讀取 Outlook PST 文件
Aspose.Email for .NET 是一個功能強大的電子郵件處理 API,可讓您在 .NET 應用程序中創建和發送電子郵件。此外,它還支持使用流行的電子郵件和存儲文件格式。我們將使用此 API 從 PST 文件中讀取文件夾的信息、消息和聯繫人。您可以 下載 API 或通過 NuGet 安裝它。
PM> Install-Package Aspose.Email -Version 22.3.0
在 C# .NET 中讀取 Outlook PST 文件
以下是在 C# 中讀取 PST 文件並提取其信息的步驟。
- 使用 PersonalStorage.FromFile() 方法加載 PST 文件。
- 使用 PersonalStorage.RootFolder.GetSubFolders() 方法獲取 PST 中的文件夾集合。
- 檢索文件夾的信息,例如名稱、項目數等。
以下代碼示例展示瞭如何解析 PST 文件並獲取文件夾信息。
// 加載 PST 文件
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");
// 獲取文件夾信息
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// 瀏覽每個文件夾以顯示其信息
foreach (FolderInfo folderInfo in folderInfoCollection)
{
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("Total items: " + folderInfo.ContentCount);
Console.WriteLine("Total unread items: " + folderInfo.ContentUnreadCount);
Console.WriteLine("-----------------------------------");
}
在 C# 中從 PST 文件中讀取電子郵件
電子郵件是 MS Outlook 存儲在 PST 文件中的主要實體。那麼讓我們看看如何在 C# 中從 PST 文件中讀取電子郵件。
- 使用 PersonalStorage.FromFile() 方法加載 PST 文件。
- 使用 PersonalStorage.RootFolder 屬性訪問根文件夾。
- 使用 FolderInfo.GetContents() 方法獲取消息集合。
- 遍歷集合中的消息並讀取每條消息的字段。
以下代碼示例顯示如何在 C# .NET 中從 PST 文件中提取消息。
// 加載 Outlook PST 文件
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");
// 獲取 PST 文件的顯示格式
Console.WriteLine("Display Format: " + pst.Format);
// 獲取文件夾和消息信息
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;
// 調用遞歸方法從每個文件夾中提取msg文件
ExtractMsgFiles(folderInfo, pst);
///<summary>
/// 這是一個顯示文件夾內容的遞歸方法
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
// 顯示文件夾名稱
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("==================================");
// 遍歷此文件夾中的所有郵件
Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
{
Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
// 在 MapiMessage 實例中獲取消息
MapiMessage message = pst.ExtractMessage(messageInfo);
// 將此消息以 msg 格式保存到磁盤
message.Save(message.Subject.Replace(":", " ") + ".msg");
// 將此消息以 msg 格式保存到流中
MemoryStream messageStream = new MemoryStream();
message.Save(messageStream);
}
// 為每個子文件夾遞歸調用此方法
if (folderInfo.HasSubFolders == true)
{
foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
{
ExtractMsgFiles(subfolderInfo, pst);
}
}
}
在 C# 中從 PST 文件中提取聯繫人
在某些情況下,您可能需要提取存儲在 PST 文件中的聯繫人信息。以下步驟演示瞭如何使用 C# 訪問 PST 文件中的聯繫人。
- 使用 PersonalStorage.FromFile() 方法加載 PST 文件。
- 使用 PersonalStorage.RootFolder.GetSubFolder(“Contacts”) 方法獲取聯繫人文件夾的引用。
- 使用 FolderInfo.GetContents() 方法獲取聯繫人集合。
- 遍歷聯繫人集合併讀取每個聯繫人或保存它。
以下代碼示例展示瞭如何使用 C# 從 PST 文件中提取聯繫人。
// 加載 Outlook PST 文件
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");
// 獲取聯繫人文件夾
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");
// 遍歷此文件夾中的所有聯繫人
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (MessageInfo messageInfo in messageInfoCollection)
{
// 獲取聯繫信息
MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
// 投射到 MapiContact
MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();
// 在屏幕上顯示一些內容
Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
// 以 MSG 格式保存到磁盤
if (contact.NameInfo.DisplayName != null)
{
MapiMessage message = personalStorage.ExtractMessage(messageInfo);
// 擺脫不能用作文件名的非法字符
string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
}
}
獲取免費的 API 許可證
您可以通過獲得臨時許可證免費試用 Aspose.Email for .NET。
結論
在本文中,您了解瞭如何在 C# .NET 中以編程方式讀取 PST 文件。此外,您還了解瞭如何在 C# 中讀取文件夾信息、獲取電子郵件以及從 PST 文件中提取聯繫人。此外,您可以使用 文檔 探索更多關於 Aspose.Email for .NET 的信息。此外,您可以在我們的 論壇 上分享您的問題或疑問。