PST (Personal Storage Table) เป็นรูปแบบไฟล์จัดเก็บข้อมูลที่ใช้โดยโปรแกรมต่างๆ ของ Microsoft เช่น MS Outlook, Exchange และ Windows Messaging ไฟล์ PST สามารถจัดเก็บข้อความ รายชื่อติดต่อ ปฏิทิน กิจกรรม ฯลฯ ในบางกรณี คุณอาจต้องแยกวิเคราะห์ไฟล์ PST และแยกข้อมูลจากไฟล์โดยใช้โปรแกรม บทความนี้จึงแสดงวิธีอ่านไฟล์ MS Outlook PST โดยใช้ C# .NET โดยเฉพาะอย่างยิ่ง คุณจะได้เรียนรู้วิธีดึงข้อมูลของโฟลเดอร์ อ่านอีเมล และดึงข้อมูลผู้ติดต่อจากไฟล์ PST
.NET API เพื่ออ่านไฟล์ Outlook PST
Aspose.Email for .NET คือ API การประมวลผลอีเมลที่มีประสิทธิภาพซึ่งช่วยให้คุณสร้างและส่งอีเมลจากภายในแอปพลิเคชัน .NET นอกจากนี้ยังรองรับการทำงานกับอีเมลและรูปแบบไฟล์ที่เก็บข้อมูลยอดนิยมอีกด้วย เราจะใช้ API นี้เพื่ออ่านข้อมูลของโฟลเดอร์ ข้อความ และผู้ติดต่อจากไฟล์ PST คุณสามารถ ดาวน์โหลด API หรือติดตั้งผ่าน NuGet
PM> Install-Package Aspose.Email -Version 22.3.0
อ่านไฟล์ Outlook PST ใน C# .NET
ต่อไปนี้เป็นขั้นตอนในการอ่านไฟล์ PST และแตกข้อมูลใน C#
- โหลดไฟล์ PST โดยใช้วิธี PersonalStorage.FromFile()
- รับคอลเลกชันโฟลเดอร์ใน PST โดยใช้วิธี PersonalStorage.RootFolder.GetSubFolders()
- ดึงข้อมูลของโฟลเดอร์ เช่น ชื่อ จำนวนรายการ เป็นต้น
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแยกวิเคราะห์ไฟล์ 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("-----------------------------------");
}
อ่านอีเมลจากไฟล์ PST ใน C#
อีเมลเป็นเอนทิตีหลักที่ MS Outlook เก็บไว้ในไฟล์ PST มาดูวิธีอ่านข้อความอีเมลจากไฟล์ PST ใน C# กัน
- โหลดไฟล์ PST โดยใช้วิธี PersonalStorage.FromFile()
- เข้าถึงโฟลเดอร์รูทโดยใช้คุณสมบัติ PersonalStorage.RootFolder
- รับการรวบรวมข้อความโดยใช้เมธอด FolderInfo.GetContents()
- วนซ้ำข้อความในคอลเลกชั่นและอ่านฟิลด์ของแต่ละข้อความ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแยกข้อความจากไฟล์ PST ใน C# .NET
// โหลดไฟล์ 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);
}
}
}
แยกผู้ติดต่อจากไฟล์ PST ใน C
ในบางกรณี คุณอาจต้องแยกข้อมูลผู้ติดต่อที่จัดเก็บไว้ในไฟล์ PST ขั้นตอนต่อไปนี้จะสาธิตวิธีการเข้าถึงผู้ติดต่อในไฟล์ PST ใน C#
- โหลดไฟล์ PST โดยใช้วิธี PersonalStorage.FromFile()
- รับการอ้างอิงของโฟลเดอร์ผู้ติดต่อโดยใช้เมธอด PersonalStorage.RootFolder.GetSubFolder(“Contacts”)
- รับชุดข้อมูลผู้ติดต่อโดยใช้เมธอด FolderInfo.GetContents()
- วนซ้ำคอลเล็กชันรายชื่อติดต่อและอ่านรายชื่อติดต่อแต่ละรายการหรือบันทึก
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกผู้ติดต่อจากไฟล์ PST ใน C#
// โหลดไฟล์ 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);
// บันทึกลงดิสก์ในรูปแบบผงชูรส
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 ได้ฟรีโดย ขอรับใบอนุญาตชั่วคราว
บทสรุป
ในบทความนี้ คุณได้เรียนรู้วิธีการอ่านไฟล์ PST โดยทางโปรแกรมใน C# .NET นอกจากนี้ คุณได้เห็นวิธีอ่านข้อมูลโฟลเดอร์ ดึงข้อมูลอีเมล และดึงข้อมูลผู้ติดต่อจากไฟล์ PST ใน C# นอกจากนี้ คุณสามารถสำรวจเพิ่มเติมเกี่ยวกับ Aspose.Email for .NET โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถแบ่งปันคำถามหรือข้อสงสัยของคุณบน ฟอรัม ของเรา