Mengonversi OLM ke PST

OLM adalah format file basis data yang digunakan Microsoft Outlook untuk Mac. File OLM menyimpan pesan email, data kalender, kontak, dan pengaturan aplikasi, dan tidak didukung oleh Outlook untuk Windows. Untuk memigrasikan kotak surat dari Outlook untuk Mac ke Outlook untuk Windows, Anda perlu mengonversi file OLM ke Outlook PST format. Aspose.Email untuk .NET memungkinkan Anda melakukan ini dalam kode, tanpa harus menginstal Microsoft Outlook.

Cara Konversi Bekerja

Untuk mengonversi file OLM ke PST, ikuti langkah-langkah berikut:

  1. Buat sebuah instansi dari OlmStorage kelas untuk membuka file OLM sumber.
  2. Buat file PST baru dengan PersonalStorage.Create metode.
  3. Implementasikan sebuah GetContainerClass metode yang memetakan kelas pesan ke kelas folder (kontainer) yang sesuai, sehingga setiap folder dibuat dengan tipe yang benar di PST.
  4. Implementasikan sebuah AddToPst metode yang membaca secara rekursif setiap folder dan pesannya dari file OLM - menggunakan EnumerateMapiMessages - dan menambahkannya ke PST dalam urutan yang sama, menggunakan AddSubFolder dan AddMessage metode dari FolderInfo.

Contoh Kode

Kode berikut menunjukkan cara mengonversi file OLM ke PST.

Metode 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);
    }
}

Metode 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";
}

Metode 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);
    }
}