PST (Bảng lưu trữ cá nhân) là định dạng tệp lưu trữ được các chương trình Microsoft khác nhau như MS Outlook, Exchange và Windows Messaging sử dụng. Các tệp PST có khả năng lưu trữ tin nhắn, danh bạ, lịch, sự kiện, v.v. Trong một số trường hợp nhất định, bạn có thể cần phải phân tích cú pháp tệp PST và trích xuất dữ liệu từ nó theo chương trình. Để đạt được điều đó, bài viết này hướng dẫn cách đọc tệp MS Outlook PST bằng C# .NET. Đặc biệt, bạn sẽ học cách trích xuất thông tin của các thư mục, đọc email và tìm nạp danh bạ từ tệp PST.
- .NET API để đọc tệp Outlook PST
- Đọc tệp PST trong C#
- Đọc email từ tệp PST
- Trích xuất danh bạ từ tệp PST
.NET API để đọc tệp Outlook PST
Aspose.Email for .NET là một API xử lý email mạnh mẽ cho phép bạn tạo và gửi email từ bên trong các ứng dụng .NET. Ngoài ra, nó hỗ trợ làm việc với các định dạng email và tệp lưu trữ phổ biến. Chúng tôi sẽ sử dụng API này để đọc thông tin, tin nhắn và địa chỉ liên hệ của các thư mục từ các tệp PST. Bạn có thể tải xuống API hoặc cài đặt nó qua NuGet.
PM> Install-Package Aspose.Email -Version 22.3.0
Đọc tệp Outlook PST trong C# .NET
Sau đây là các bước để đọc tệp PST và trích xuất thông tin của nó trong C#.
- Tải tệp PST bằng phương thức PersonalStorage.FromFile().
- Lấy bộ sưu tập thư mục trong PST bằng phương pháp PersonalStorage.RootFolder.GetSubFolders().
- Truy xuất thông tin của các thư mục như tên, số lượng mục, v.v.
Mẫu mã sau đây cho thấy cách phân tích cú pháp tệp PST và tìm nạp thông tin của các thư mục.
// Tải tệp PST
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");
// Nhận thông tin thư mục
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();
// Duyệt qua từng thư mục để hiển thị thông tin của nó
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 email từ tệp PST trong C#
Email là các thực thể chính được MS Outlook lưu trữ trong tệp PST. Vì vậy, chúng ta hãy xem cách đọc email từ tệp PST trong C#.
- Tải tệp PST bằng phương thức PersonalStorage.FromFile().
- Truy cập thư mục gốc bằng thuộc tính PersonalStorage.RootFolder.
- Nhận bộ sưu tập tin nhắn bằng phương thức FolderInfo.GetContents().
- Lặp lại các thư trong bộ sưu tập và đọc các trường của mỗi thư.
Mẫu mã sau đây cho thấy cách trích xuất thông báo từ tệp PST trong C# .NET.
// Tải tệp Outlook PST
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");
// Nhận Định dạng hiển thị của tệp PST
Console.WriteLine("Display Format: " + pst.Format);
// Nhận thông tin thư mục và tin nhắn
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;
// Gọi phương thức đệ quy để trích xuất các tệp tin từ mỗi thư mục
ExtractMsgFiles(folderInfo, pst);
///<summary>
/// Đây là một phương thức đệ quy để hiển thị nội dung của một thư mục
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
// Hiển thị tên thư mục
Console.WriteLine("Folder: " + folderInfo.DisplayName);
Console.WriteLine("==================================");
// Lặp lại tất cả các thư trong thư mục này
Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
{
Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
// Nhận thông báo trong phiên bản MapiMessage
MapiMessage message = pst.ExtractMessage(messageInfo);
// Lưu thông báo này vào đĩa ở định dạng tin nhắn
message.Save(message.Subject.Replace(":", " ") + ".msg");
// Lưu tin nhắn này vào luồng ở định dạng tin nhắn
MemoryStream messageStream = new MemoryStream();
message.Save(messageStream);
}
// Gọi phương thức này một cách đệ quy cho mỗi thư mục con
if (folderInfo.HasSubFolders == true)
{
foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
{
ExtractMsgFiles(subfolderInfo, pst);
}
}
}
Trích xuất Danh bạ từ Tệp PST trong C#
Trong một số trường hợp nhất định, bạn có thể cần trích xuất thông tin của các liên hệ được lưu trữ trong tệp PST. Các bước sau đây trình bày cách truy cập danh bạ trong tệp PST trong C#.
- Tải tệp PST bằng phương thức PersonalStorage.FromFile().
- Lấy tham chiếu của thư mục danh bạ bằng phương pháp PersonalStorage.RootFolder.GetSubFolder (“Danh bạ”).
- Nhận tập hợp các liên hệ bằng phương pháp FolderInfo.GetContents().
- Lặp lại bộ sưu tập danh bạ và đọc từng số liên lạc hoặc lưu nó.
Mẫu mã sau đây cho thấy cách trích xuất danh bạ từ tệp PST trong C#.
// Tải tệp Outlook PST
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");
// Tải thư mục Danh bạ
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");
// Lặp qua tất cả các địa chỉ liên hệ trong thư mục này
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
foreach (MessageInfo messageInfo in messageInfoCollection)
{
// Nhận thông tin liên hệ
MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
// Truyền tới MapiContact
MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();
// Hiển thị một số nội dung trên màn hình
Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
// Lưu vào đĩa ở định dạng MSG
if (contact.NameInfo.DisplayName != null)
{
MapiMessage message = personalStorage.ExtractMessage(messageInfo);
// Loại bỏ các ký tự bất hợp pháp không thể được sử dụng làm tên tệp
string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
}
}
Nhận giấy phép API miễn phí
Bạn có thể dùng thử Aspose.Email for .NET miễn phí bằng cách nhận giấy phép tạm thời.
Sự kết luận
Trong bài viết này, bạn đã học cách đọc các tệp PST theo chương trình trong C# .NET. Hơn nữa, bạn đã thấy cách đọc thông tin thư mục, tìm nạp email và trích xuất danh bạ từ tệp PST trong C#. Bên cạnh đó, bạn có thể khám phá thêm về Aspose.Email for .NET bằng tài liệu. Ngoài ra, bạn có thể chia sẻ câu hỏi hoặc thắc mắc của mình trên diễn đàn của chúng tôi.