Conversione da OLM a PST

OLM è un formato di file di database usato da Microsoft Outlook per Mac. I file OLM memorizzano messaggi email, dati di calendario, contatti e impostazioni dell’applicazione, e non sono supportati da Outlook per Windows. Per migrare una casella di posta da Outlook per Mac a Outlook per Windows, devi convertire il file OLM nel formato Outlook PST formato. Aspose.Email per .NET ti permette di farlo con il codice, senza che Microsoft Outlook sia installato.

Come Funziona la Conversione

Per convertire un file OLM in PST, segui questi passaggi:

  1. Crea un’istanza di OlmStorage classe per aprire il file OLM sorgente.
  2. Crea un nuovo file PST con il PersonalStorage.Create metodo.
  3. Implementa un GetContainerClass metodo che mappa una classe di messaggio alla corrispondente classe di cartella (contenitore), così ogni cartella viene creata con il tipo corretto nel PST.
  4. Implementa un AddToPst metodo che legge ricorsivamente ogni cartella e i suoi messaggi dal file OLM - usando EnumerateMapiMessages - e li aggiunge al PST nello stesso ordine, usando il AddSubFolder e AddMessage metodi di FolderInfo.

Esempio di Codice

Il codice seguente mostra come convertire un file OLM in PST.

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

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

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