Převod OLM na PST

OLM je databázový formát souboru používaný Microsoft Outlook pro Mac. OLM soubory ukládají e‑mailové zprávy, kalendářová data, kontakty a nastavení aplikace a nejsou podporovány Outlookem pro Windows. Pro migraci poštovní schránky z Outlooku pro Mac do Outlooku pro Windows musíte převést OLM soubor do formátu Outlook PST formát. Aspose.Email pro .NET vám umožní to provést v kódu, bez nutnosti mít nainstalovaný Microsoft Outlook.

Jak funguje převod

Pro převod OLM souboru do PST postupujte podle těchto kroků:

  1. Vytvořte instanci OlmStorage class pro otevření zdrojového souboru OLM.
  2. Vytvořte nový PST soubor pomocí PersonalStorage.Create metoda.
  3. Implementujte GetContainerClass metodu, která mapuje třídu zprávy na odpovídající třídu složky (kontejneru), takže každá složka je v PST vytvořena se správným typem.
  4. Implementujte AddToPst metody, která rekurzivně čte každou složku a její zprávy z OLM souboru – pomocí EnumerateMapiMessages - a přidá je do PST ve stejném pořadí pomocí AddSubFolder a AddMessage metody z FolderInfo.

Ukázkový kód

Následující kód ukazuje, jak převést OLM soubor na PST.

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

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

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