การแปลง OLM เป็น PST

OLM เป็นรูปแบบไฟล์ฐานข้อมูลที่ใช้โดย Microsoft Outlook สำหรับ Mac ไฟล์ OLM เก็บข้อความอีเมล, ข้อมูลปฏิทิน, รายชื่อผู้ติดต่อ, และการตั้งค่าแอปพลิเคชัน และไม่รองรับโดย Outlook สำหรับ Windows เพื่อย้ายกล่องเมลจาก Outlook สำหรับ Mac ไปยัง Outlook สำหรับ Windows คุณต้องแปลงไฟล์ OLM ไปเป็น Outlook PST รูปแบบ. Aspose.Email for .NET ให้คุณทำเช่นนี้ด้วยโค้ดโดยไม่ต้องติดตั้ง Microsoft Outlook

วิธีการทำงานของการแปลง

เพื่อแปลงไฟล์ OLM ไปเป็น PST, ทำตามขั้นตอนต่อไปนี้:

  1. สร้างอินสแตนซ์ของ OlmStorage คลาสสำหรับเปิดไฟล์ OLM แหล่งที่มา.
  2. สร้างไฟล์ PST ใหม่ด้วย PersonalStorage.Create เมธอด.
  3. ดำเนินการ GetContainerClass เมธอดที่แม็พคลาสข้อความไปยังคลาสโฟลเดอร์ (คอนเทนเนอร์) ที่สอดคล้องกัน, ดังนั้นแต่ละโฟลเดอร์จะถูกสร้างด้วยประเภทที่ถูกต้องใน PST
  4. ดำเนินการ AddToPst เมธอดที่อ่านโฟลเดอร์และข้อความแต่ละรายการจากไฟล์ OLM อย่างซ้ำซ้อนโดยใช้ EnumerateMapiMessages - และเพิ่มพวกมันเข้าไปใน PST ตามลำดับเดียวกันโดยใช้ AddSubFolder และ AddMessage เมธอดของ FolderInfo.

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

โค้ดต่อไปนี้แสดงวิธีแปลงไฟล์ OLM ไปเป็น PST

เมธอด Main:

// create an instance of OlmStorage class to open the source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
    // recursively read each folder and its messages
    // and add them to the PST in the same order
    foreach (var olmFolder in olm.FolderHierarchy)
    {
        AddToPst(pst.RootFolder, olmFolder);
    }
}

เมธอด GetContainerClass:

public string GetContainerClass(string messageClass)
{
    if (messageClass.StartsWith("IPM.Contact") || messageClass.StartsWith("IPM.DistList"))
    {
        return "IPF.Contact";
    }

    if (messageClass.StartsWith("IPM.StickyNote"))
    {
        return "IPF.StickyNote";
    }

    if (messageClass.StartsWith("IPM.Activity"))
    {
        return "IPF.Journal";
    }

    if (messageClass.StartsWith("IPM.Task"))
    {
        return "IPF.Task";
    }

    if (messageClass.StartsWith("IPM.Appointment") || messageClass.StartsWith("IPM.Schedule.meeting"))
    {
        return "IPF.Appointment";
    }

    return "IPF.Note";
}

เมธอด AddToPst:

public void AddToPst(FolderInfo pstFolder, OlmFolder olmFolder)
{
    FolderInfo pstSubFolder = pstFolder.GetSubFolder(olmFolder.Name);

    foreach (var msg in olmFolder.EnumerateMapiMessages())
    {
        if (pstSubFolder == null)
        {
            pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name, GetContainerClass(msg.MessageClass));
        }

        pstSubFolder.AddMessage(msg);
    }

    if (pstSubFolder == null)
    {
        pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name);
    }

    foreach (var olmSubFolder in olmFolder.SubFolders)
    {
        AddToPst(pstSubFolder, olmSubFolder);
    }
}