Umwandlung von OLM nach PST

OLM ist ein Datenbankdateiformat, das von Microsoft Outlook für Mac verwendet wird. OLM‑Dateien speichern E‑Mails, Kalenderdaten, Kontakte und Anwendungseinstellungen und werden von Outlook für Windows nicht unterstützt. Um ein Postfach von Outlook für Mac nach Outlook für Windows zu migrieren, müssen Sie die OLM‑Datei in das Outlook PST Format. Aspose.Email für .NET ermöglicht dies im Code, ohne dass Microsoft Outlook installiert sein muss.

Wie die Konvertierung funktioniert

Um eine OLM‑Datei in PST zu konvertieren, gehen Sie wie folgt vor:

  1. Erstellen Sie eine Instanz von dem OlmStorage Klasse zum Öffnen der Quell-OLM-Datei.
  2. Erstellen Sie eine neue PST-Datei mit dem PersonalStorage.Create Methode.
  3. Implementieren Sie ein GetContainerClass Methode, die eine Nachrichtenklasse der entsprechenden Ordner‑(Container‑)Klasse zuordnet, sodass jeder Ordner im PST mit dem korrekten Typ erzeugt wird.
  4. Implementieren Sie ein AddToPst Methode verwendet wird, die rekursiv jeden Ordner und seine Nachrichten aus der OLM‑Datei liest – mit EnumerateMapiMessages - und fügt sie in derselben Reihenfolge zum PST hinzu, wobei die AddSubFolder und AddMessage Methoden von FolderInfo.

Code‑Beispiel

Der folgende Code zeigt, wie man eine OLM‑Datei in PST konvertiert.

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 repräsentiert:

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