Conversión de OLM a PST

OLM es un formato de archivo de base de datos usado por Microsoft Outlook para Mac. Los archivos OLM almacenan mensajes de correo, datos de calendario, contactos y configuraciones de la aplicación, y no son compatibles con Outlook para Windows. Para migrar un buzón de Outlook para Mac a Outlook para Windows, necesita convertir el archivo OLM al Outlook PST formato. Aspose.Email para .NET le permite hacer esto en código, sin que Microsoft Outlook esté instalado.

Cómo Funciona la Conversión

Para convertir un archivo OLM a PST, siga estos pasos:

  1. Cree una instancia de la OlmStorage clase para abrir el archivo OLM de origen.
  2. Crea un nuevo archivo PST con el PersonalStorage.Create método.
  3. Implemente un GetContainerClass método que asigna una clase de mensaje a la clase de carpeta (contenedor) correspondiente, de modo que cada carpeta se cree con el tipo correcto en el PST.
  4. Implemente un AddToPst método que lee recursivamente cada carpeta y sus mensajes del archivo OLM - usando EnumerateMapiMessages - y los agrega al PST en el mismo orden, usando el AddSubFolder y AddMessage métodos de FolderInfo.

Ejemplo de Código

El siguiente código muestra cómo convertir un archivo OLM a PST.

Método 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);
    }
}

Método 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";
}

Método 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);
    }
}