המרת OLM ל‑PST

OLM הוא פורמט קובץ מסד נתונים המשמש את Microsoft Outlook for Mac. קבצי OLM מאחסנים הודעות דואר, נתוני לוח שנה, אנשי קשר והגדרות יישום, ואינם נתמכים על‑ידי Outlook for Windows. כדי להעביר תיבת דואר מ‑Outlook for Mac ל‑Outlook for 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);
    }
}