La migración de datos de correo electrónico desde Outlook for Mac (OLM) a formatos ampliamente compatibles como MBOX (para buzones de Thunderbird / Unix) y PST (Outlook para Windows) es una tarea común al cambiar entre plataformas. Microsoft Outlook for Mac utiliza el formato OLM (Outlook for Mac Data File) para almacenar correos electrónicos, contactos, calendarios y otros elementos. Sin embargo, migrar estos datos a entornos basados en Windows u otros clientes de correo a menudo requiere convertir los archivos OLM a formatos universalmente compatibles como MBOX (utilizado por clientes como Thunderbird y Apple Mail) o PST (Outlook Personal Storage Table para Windows).

En este artículo, le mostraremos cómo convertir archivos OLM a formatos PST y MBOX en C# usando Aspose.Email for .NET, una API potente que simplifica programáticamente tareas complejas de migración de correo electrónico. Aprenderá a abrir archivos OLM, extraer mensajes, preservar la jerarquía de carpetas y generar archivos de correo portátiles para múltiples plataformas.

Uso de Aspose.Email for .NET para la conversión

[Aspose.Email for .NET][] proporciona funciones integrales para trabajar con varios formatos de correo electrónico, incluidos OLM, MBOX y PST. Simplifica tareas de conversión complejas con su API intuitiva y documentación extensa. A continuación, recorreremos los pasos para convertir OLM a MBOX y PST usando C#.

Para comenzar, instale el paquete NuGet Aspose.Email en su proyecto .NET:

Install-Package Aspose.Email

Este paquete incluye todas las clases necesarias para manejar archivos OLM, MBOX y PST.

Convertir OLM a MBOX

El formato MBOX almacena los mensajes de correo electrónico como entradas MIME concatenadas, y se usa comúnmente en clientes de correo de código abierto. A continuación se muestra un ejemplo de código simple pero eficiente para convertir todos los mensajes de una carpeta OLM en un archivo MBOX. Utiliza los siguientes miembros de la API:

Pasos

  1. Defina las rutas de archivo para el archivo OLM de entrada y el archivo MBOX de salida.
  2. Abra el archivo OLM usando OlmStorage.FromFile.
  3. Cree un escritor MBOX usando MboxrdStorageWriter con la ruta de salida especificada y las opciones.
  4. Acceda a la carpeta “Inbox” del archivo OLM usando una búsqueda que no distinga mayúsculas y minúsculas.
  5. Recorra todos los mensajes MAPI en la carpeta “Inbox”.
  6. Convierta cada mensaje MAPI a un objeto MailMessage estándar.
  7. Escriba cada mensaje convertido en el archivo MBOX.

Ejemplo de código

var olmPath = @"C:\data\archive.olm";
var mboxPath = @"C:\data\output.mbox";

// Load OLM file using OlmStorage
using (var olm = OlmStorage.FromFile(olmPath))
using (var mboxWriter = new MboxrdStorageWriter(mboxPath, new MboxSaveOptions()))
{
    // Get the folder (case-insensitive example)
    var inbox = olm.GetFolder("Inbox", true);

// Iterate MAPI messages (returns MapiMessage objects)
    foreach (MapiMessage mapi in inbox.EnumerateMapiMessages())
    {
        // Convert to MailMessage and write to MBOX
        var mail = mapi.ToMailMessage(new MailConversionOptions());
        mboxWriter.WriteMessage(mail);
    }
}

Nota: Si deseas un MBOX por carpeta, crea un escritor separado para cada carpeta OLM. Si prefieres un solo archivo, reutiliza una instancia de MboxrdStorageWriter y llama a WriteMessage repetidamente como se muestra en el ejemplo de código anterior.

Convertir OLM a PST

Convertir OLM a PST a menudo requiere no solo copiar los mensajes sino también recrear la jerarquía de carpetas. El ejemplo de código a continuación muestra cómo convertir y copiar la estructura de carpetas y los mensajes de un archivo de archivo OLM de Outlook a un archivo PST Unicode usando Aspose.Email for .NET.

Miembros clave

Pasos

  1. Establece las rutas de archivo para el archivo OLM de origen y el archivo PST de destino.
  2. Abre el archivo OLM para lectura y crea un nuevo archivo PST para escritura.
  3. Recupera las carpetas de nivel superior del archivo OLM.
  4. Define una función auxiliar para encontrar o crear una carpeta coincidente dentro del PST para un nombre de carpeta dado.
  5. Define una función recursiva para:
    • Crear o obtener la carpeta PST correspondiente para cada carpeta OLM.
    • Copiar todos los mensajes de la carpeta OLM a la carpeta PST.
    • Llamarse a sí misma para cada subcarpeta en la carpeta OLM para mantener el árbol de carpetas.
  6. Llama a la función recursiva en todas las carpetas OLM de nivel superior, usando la carpeta raíz del PST como padre.
  7. Guarda toda la jerarquía de carpetas y los mensajes en el nuevo archivo PST, preservando los datos MAPI.

Ejemplo de código

var olmPath = @"C:\data\archive.olm";
var pstPath = @"C:\data\output.pst";

// Create a new PST file
using (var olm = OlmStorage.FromFile(olmPath))
using (var pst = PersonalStorage.Create(pstPath, FileFormatVersion.Unicode))
{
    // Get top-level folders in OLM
    var rootFolders = olm.GetFolders();

// Helper: map OlmFolder -> FolderInfo in PST by recursively creating subfolders
    FolderInfo GetOrCreatePstFolder(FolderInfo parentPstFolder, string folderName)
    {
        // Try to find existing subfolder (case-insensitive)
        foreach (var sub in parentPstFolder.GetSubFolders())
        {
            if (string.Equals(sub.DisplayName, folderName, StringComparison.OrdinalIgnoreCase))
                return sub;
        }

// Create new subfolder
        return parentPstFolder.AddSubFolder(folderName);
    }

// Recursive traversal
    void ProcessOlmFolder(OlmFolder olmFolder, FolderInfo pstParent)
    {
        // Create / get the corresponding PST folder
        var pstFolder = GetOrCreatePstFolder(pstParent, olmFolder.Name);

// Copy messages: OlmFolder.EnumerateMapiMessages returns MapiMessage instances
        foreach (var mapi in olmFolder.EnumerateMapiMessages())
        {
            // AddMessage preserves MAPI data into PST
            pstFolder.AddMessage(mapi);
        }

// Recurse into OLM subfolders (OlmFolder.SubFolders property)
        foreach (var child in olmFolder.SubFolders)
        {
            ProcessOlmFolder(child, pstFolder);
        }
    }

// Note: PST.RootFolder exists; create top-level folders under it.
    foreach (var top in rootFolders)
    {
        // Skip creating a duplicate for default PST root folder names if needed
        ProcessOlmFolder(top, pst.RootFolder);
    }
}

Importante: un PST recién creado ya incluye una carpeta Elementos eliminados de forma predeterminada — así que tenga cuidado de no duplicar las carpetas predeterminadas.

Nota:

Conclusión

En este artículo, hemos aprendido cómo convertir archivos Outlook for Mac (OLM) a formatos PST y MBOX en C# usando Aspose.Email for .NET. Exploramos cómo abrir y procesar archivos OLM, extraer mensajes y preservar la jerarquía de carpetas al exportar los datos a nuevos formatos de almacenamiento de correo. Con la API de Aspose.Email, los desarrolladores pueden automatizar fácilmente las migraciones de correo electrónico entre plataformas, garantizando la compatibilidad entre Outlook for Mac, Outlook for Windows y clientes de código abierto como Thunderbird.

Para obtener más detalles, explore la documentación de Aspose.Email y la referencia de API.

Recursos adicionales

Ver también