تحويل OLM إلى PST

OLM هو تنسيق ملف قاعدة بيانات يستخدمه Microsoft Outlook لـ Mac. تخزن ملفات OLM رسائل البريد الإلكتروني، بيانات التقويم، جهات الاتصال وإعدادات التطبيق، ولا يدعمها Outlook لـ Windows. لتقنيل صندوق بريد من Outlook لـ Mac إلى Outlook لـ Windows، تحتاج إلى تحويل ملف OLM إلى PST الصيغة. يتيح Aspose.Email لـ .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);
    }
}