在 C# .NET 中讀取 MS Outlook PST 文件

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 文件並提取其信息的步驟。

以下代碼示例展示瞭如何解析 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 文件中讀取電子郵件。

以下代碼示例顯示如何在 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 文件中的聯繫人。

以下代碼示例展示瞭如何使用 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 的信息。此外,您可以在我們的 論壇 上分享您的問題或疑問。

也可以看看