การย้ายข้อมูลอีเมลจาก Outlook for Mac (OLM) ไปยังรูปแบบที่ได้รับการสนับสนุนอย่างกว้างขวางเช่น MBOX (สำหรับ Thunderbird / Unix mailboxes) และ PST (Outlook for Windows) เป็นงานทั่วไปเมื่อย้ายระหว่างแพลตฟอร์ม Microsoft Outlook for Mac ใช้รูปแบบ OLM (Outlook for Mac Data File) เพื่อจัดเก็บอีเมล รายชื่อผู้ติดต่อ ปฏิทิน และรายการอื่น ๆ อย่างไรก็ตาม การย้ายข้อมูลนี้ไปยังสภาพแวดล้อมที่ใช้ Windows หรือไคลเอนต์อีเมลอื่น ๆ มักต้องแปลงไฟล์ OLM ไปเป็นรูปแบบที่สนับสนุนโดยทั่วไปเช่น MBOX (ที่ใช้โดยไคลเอนต์เช่น Thunderbird และ Apple Mail) หรือ PST (Outlook Personal Storage Table for Windows).

ในบทความนี้ เราจะแสดงวิธีการแปลงไฟล์ OLM เป็นรูปแบบ PST และ MBOX ด้วย C# โดยใช้ Aspose.Email for .NET ซึ่งเป็น API ที่ทรงพลังที่ทำให้การย้ายอีเมลที่ซับซ้อนเป็นเรื่องง่ายโดยโปรแกรม คุณจะได้เรียนรู้วิธีเปิดไฟล์ OLM, ดึงข้อความ, รักษาโครงสร้างโฟลเดอร์, และสร้างไฟล์เก็บอีเมลแบบพกพาสำหรับหลายแพลตฟอร์ม

การใช้ Aspose.Email for .NET สำหรับการแปลง

[Aspose.Email for .NET][] ให้คุณสมบัติที่ครอบคลุมในการทำงานกับรูปแบบอีเมลต่าง ๆ รวมถึง OLM, MBOX, และ PST มันทำให้การแปลงที่ซับซ้อนง่ายขึ้นด้วย API ที่ใช้งานง่ายและเอกสารที่ละเอียดครบถ้วน ด้านล่างเราจะอธิบายขั้นตอนการแปลง OLM เป็น MBOX และ PST ด้วย C#

เพื่อเริ่มต้น ให้ติดตั้งแพ็กเกจ NuGet ของ Aspose.Email ในโครงการ .NET ของคุณ:

Install-Package Aspose.Email

แพคเกจนี้รวมคลาสที่จำเป็นทั้งหมดสำหรับการจัดการไฟล์ OLM, MBOX และ PST.

แปลง OLM เป็น MBOX

รูปแบบ MBOX จะจัดเก็บข้อความอีเมลเป็นรายการ MIME ที่ต่อเนื่องกัน ซึ่งมักใช้โดยไคลเอนต์อีเมลแบบโอเพนซอร์ส ด้านล่างเป็นตัวอย่างโค้ดที่เรียบง่ายแต่มีประสิทธิภาพสำหรับการแปลงข้อความทั้งหมดจากโฟลเดอร์ OLM ไปเป็นไฟล์ MBOX โดยใช้สมาชิก API ต่อไปนี้:

ขั้นตอน

  1. กำหนดเส้นทางไฟล์สำหรับไฟล์ OLM อินพุตและไฟล์ MBOX เอาต์พุต.
  2. เปิดไฟล์ OLM ด้วย OlmStorage.FromFile.
  3. สร้างตัวเขียน MBOX โดยใช้ MboxrdStorageWriter พร้อมเส้นทางเอาต์พุตและตัวเลือกที่ระบุ.
  4. เข้าถึงโฟลเดอร์ “Inbox” จากไฟล์ OLM ด้วยการค้นหาแบบไม่สนใจตัวพิมพ์ใหญ่/เล็ก.
  5. วนลูปผ่านข้อความ MAPI ทั้งหมดในโฟลเดอร์ “Inbox”.
  6. แปลงข้อความ MAPI แต่ละรายการเป็นอ็อบเจ็กต์ MailMessage มาตรฐาน.
  7. เขียนข้อความที่แปลงแล้วแต่ละรายการลงในไฟล์ MBOX.

ตัวอย่างโค้ด

var olmPath = @"C:\data\archive.olm";
var mboxPath = @"C:\data\output.mbox";

// Load OLM file using OlmStorage
using (var olm = OlmStorage.FromFile(olmPath))
using (var mboxWriter = new MboxrdStorageWriter(mboxPath, new MboxSaveOptions()))
{
    // Get the folder (case-insensitive example)
    var inbox = olm.GetFolder("Inbox", true);

    // Iterate MAPI messages (returns MapiMessage objects)
    foreach (MapiMessage mapi in inbox.EnumerateMapiMessages())
    {
        // Convert to MailMessage and write to MBOX
        var mail = mapi.ToMailMessage(new MailConversionOptions());
        mboxWriter.WriteMessage(mail);
    }
}

หมายเหตุ:
หากคุณต้องการ MBOX หนึ่งไฟล์ต่อโฟลเดอร์ ให้สร้าง writer แยกสำหรับแต่ละโฟลเดอร์ OLM.
หากคุณต้องการเก็บเป็นไฟล์เดียว ให้ใช้ MboxrdStorageWriter ตัวเดียวและเรียก WriteMessage ซ้ำตามตัวอย่างโค้ดด้านบน.

แปลง OLM เป็น PST

การแปลง OLM เป็น PST มักต้องไม่เพียงแค่คัดลอกข้อความเท่านั้น แต่ยังต้องสร้างโครงสร้างโฟลเดอร์ใหม่ ตัวอย่างโค้ดด้านล่างแสดงวิธีการแปลงและคัดลอกโครงสร้างโฟลเดอร์และข้อความจากไฟล์เก็บอาร์ไคฟ์ OLM ของ Outlook ไปยังไฟล์ PST แบบ Unicode โดยใช้ Aspose.Email for .NET.

สมาชิกสำคัญ

ขั้นตอน

  1. กำหนดเส้นทางไฟล์สำหรับไฟล์ OLM ต้นทางและไฟล์ PST ปลายทาง.
  2. เปิดอาร์ไคฟ์ OLM เพื่ออ่านและสร้างไฟล์ PST ใหม่เพื่อเขียน.
  3. ดึงโฟลเดอร์ระดับบนสุดจากอาร์ไคฟ์ OLM.
  4. กำหนดฟังก์ชันช่วยเหลือเพื่อค้นหาหรือสร้างโฟลเดอร์ที่ตรงกันใน PST สำหรับชื่อโฟลเดอร์ที่กำหนด.
  5. กำหนดฟังก์ชันแบบเรียกซ้ำเพื่อ:
    • สร้างหรือดึงโฟลเดอร์ PST ที่สอดคล้องกับแต่ละโฟลเดอร์ OLM
    • คัดลอกข้อความทั้งหมดจากโฟลเดอร์ OLM ไปยังโฟลเดอร์ PST
    • เรียกตัวเองสำหรับแต่ละโฟลเดอร์ย่อยในโฟลเดอร์ OLM เพื่อรักษาโครงสร้างต้นไม้ของโฟลเดอร์
  6. เรียกฟังก์ชันแบบเรียกซ้ำบนโฟลเดอร์ OLM ระดับบนทั้งหมด โดยใช้โฟลเดอร์รากของ PST เป็นพาเรนท์.
  7. บันทึกโครงสร้างโฟลเดอร์และข้อความทั้งหมดลงในไฟล์ PST ใหม่ โดยคงข้อมูล MAPI ไว้.

ตัวอย่างโค้ด

var olmPath = @"C:\data\archive.olm";
var pstPath = @"C:\data\output.pst";

// Create a new PST file
using (var olm = OlmStorage.FromFile(olmPath))
using (var pst = PersonalStorage.Create(pstPath, FileFormatVersion.Unicode))
{
    // Get top-level folders in OLM
    var rootFolders = olm.GetFolders();

    // Helper: map OlmFolder -> FolderInfo in PST by recursively creating subfolders
    FolderInfo GetOrCreatePstFolder(FolderInfo parentPstFolder, string folderName)
    {
        // Try to find existing subfolder (case-insensitive)
        foreach (var sub in parentPstFolder.GetSubFolders())
        {
            if (string.Equals(sub.DisplayName, folderName, StringComparison.OrdinalIgnoreCase))
                return sub;
        }

        // Create new subfolder
        return parentPstFolder.AddSubFolder(folderName);
    }

    // Recursive traversal
    void ProcessOlmFolder(OlmFolder olmFolder, FolderInfo pstParent)
    {
        // Create / get the corresponding PST folder
        var pstFolder = GetOrCreatePstFolder(pstParent, olmFolder.Name);

        // Copy messages: OlmFolder.EnumerateMapiMessages returns MapiMessage instances
        foreach (var mapi in olmFolder.EnumerateMapiMessages())
        {
            // AddMessage preserves MAPI data into PST
            pstFolder.AddMessage(mapi);
        }

        // Recurse into OLM subfolders (OlmFolder.SubFolders property)
        foreach (var child in olmFolder.SubFolders)
        {
            ProcessOlmFolder(child, pstFolder);
        }
    }

    // Note: PST.RootFolder exists; create top-level folders under it.
    foreach (var top in rootFolders)
    {
        // Skip creating a duplicate for default PST root folder names if needed
        ProcessOlmFolder(top, pst.RootFolder);
    }
}

สำคัญ: PST ที่สร้างใหม่จะมีโฟลเดอร์ Deleted Items อยู่แล้วโดยค่าเริ่มต้น — ดังนั้นควรระวังไม่ให้ทำซ้ำโฟลเดอร์เริ่มต้น.

หมายเหตุ:

  • การรักษาประเภทโฟลเดอร์: โฟลเดอร์ย่อย OLM อาจแมปไปยังโฟลเดอร์พิเศษของ Outlook ที่ระบุ (Inbox, Sent Items, Calendar). หากคุณต้องการสร้าง โฟลเดอร์ IPM ที่กำหนดล่วงหน้า (เพื่อให้ Outlook จดจำเป็นโฟลเดอร์มาตรฐาน) ให้ใช้ PersonalStorage.CreatePredefinedFolder หรือ GetPredefinedFolder ตามสถานการณ์. CreatePredefinedFolder จะคืนค่าเป็น FolderInfo. ใช้ enum StandardIpmFolder เมื่อเหมาะสม.

  • ประสิทธิภาพ: AddMessages (การเพิ่มเป็นกลุ่ม) เร็วกว่าเรียกหลายครั้งของ AddMessage. ควรรวบรวมข้อความเป็นชุดและใช้ FolderInfo.AddMessages(IEnumerable) เพื่อลดการอ่าน/เขียนบนดิสก์.

สรุป

ในบทความนี้ เราได้เรียนรู้วิธีแปลงไฟล์ Outlook for Mac (OLM) ไปเป็นรูปแบบ PST และ MBOX ด้วย C# โดยใช้ Aspose.Email for .NET เราได้สำรวจวิธีการเปิดและประมวลผลไฟล์ OLM, ดึงข้อความออก, และรักษาโครงสร้างโฟลเดอร์ขณะส่งออกข้อมูลไปยังรูปแบบการจัดเก็บเมลใหม่ ด้วย Aspose.Email API นักพัฒนาสามารถทำงานอัตโนมัติการย้ายอีเมลข้ามแพลตฟอร์มได้อย่างง่ายดาย เพื่อให้แน่ใจว่ามีความเข้ากันได้ระหว่าง Outlook for Mac, Outlook for Windows และไคลเอนต์โอเพ่นซอร์สเช่น Thunderbird.

สำหรับรายละเอียดเพิ่มเติม, สำรวจ เอกสาร Aspose.Email และ อ้างอิง API.

ทรัพยากรเพิ่มเติม

ดูเพิ่มเติม