OLM naar PST converteren

OLM is een database‑bestandformaat dat door Microsoft Outlook voor Mac wordt gebruikt. OLM‑bestanden slaan e‑mailberichten, agenda‑data, contacten en applicatie‑instellingen op, en worden niet ondersteund door Outlook voor Windows. Om een postvak van Outlook voor Mac naar Outlook voor Windows te migreren, moet u het OLM‑bestand naar het Outlook PST formaat. Aspose.Email voor .NET laat u dit in code doen, zonder Microsoft Outlook geïnstalleerd te hebben.

Hoe de conversie werkt

Om een OLM‑bestand naar PST te converteren, volg deze stappen:

  1. Maak een instantie van de OlmStorage klasse om het bron‑OLM‑bestand te openen.
  2. Maak een nieuw PST‑bestand met de PersonalStorage.Create methode.
  3. Implementeer een GetContainerClass methode die een berichtklasse aan de bijbehorende map‑ (container‑)klasse koppelt, zodat elke map in de PST met het juiste type wordt aangemaakt.
  4. Implementeer een AddToPst methode die recursief elke map en de bijbehorende berichten uit het OLM‑bestand leest – met behulp van EnumerateMapiMessages - en voegt ze toe aan de PST in dezelfde volgorde, met behulp van de AddSubFolder en AddMessage methoden van FolderInfo.

Codevoorbeeld

De volgende code toont hoe een OLM‑bestand naar PST kan worden geconverteerd.

Main‑methode:

// 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-methode:

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-methode:

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