อ่านไฟล์ MS Outlook PST ใน C# .NET

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 โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถแบ่งปันคำถามหรือข้อสงสัยของคุณบน ฟอรัม ของเรา

ดูสิ่งนี้ด้วย