Migrar dados de e‑mail do Outlook for Mac (OLM) para formatos amplamente suportados como MBOX (para Thunderbird / caixas de correio Unix) e PST (Outlook para Windows) é uma tarefa comum ao mudar entre plataformas. O Microsoft Outlook for Mac usa o formato OLM (Outlook for Mac Data File) para armazenar e‑mails, contatos, calendários e outros itens. No entanto, migrar esses dados para ambientes baseados em Windows ou outros clientes de e‑mail frequentemente requer a conversão de arquivos OLM para formatos universalmente suportados como MBOX (usado por clientes como Thunderbird e Apple Mail) ou PST (Outlook Personal Storage Table para Windows).

Neste artigo, mostraremos como converter arquivos OLM para os formatos PST e MBOX em C# usando Aspose.Email for .NET, uma API poderosa que simplifica tarefas complexas de migração de e‑mail programaticamente. Você aprenderá como abrir arquivos OLM, extrair mensagens, preservar hierarquias de pastas e gerar arquivos de e‑mail portáteis para múltiplas plataformas.

Usando Aspose.Email for .NET para Conversão

[Aspose.Email for .NET][] fornece recursos abrangentes para trabalhar com vários formatos de e‑mail, incluindo OLM, MBOX e PST. Simplifica tarefas complexas de conversão com sua API intuitiva e documentação extensa. A seguir, percorreremos as etapas para converter OLM para MBOX e PST usando C#.

Para começar, instale o pacote NuGet Aspose.Email no seu projeto .NET:

Install-Package Aspose.Email

Este pacote inclui todas as classes necessárias para manipular arquivos OLM, MBOX e PST.

Converter OLM para MBOX

O formato MBOX armazena mensagens de e‑mail como entradas MIME concatenadas, sendo comumente usado por clientes de e‑mail de código aberto. Abaixo está um exemplo de código simples, porém eficiente, que converte todas as mensagens de uma pasta OLM em um arquivo MBOX. Ele utiliza os seguintes membros da API:

Etapas

  1. Defina os caminhos dos arquivos para o arquivo OLM de entrada e o arquivo MBOX de saída.
  2. Abra o arquivo OLM usando OlmStorage.FromFile.
  3. Crie um escritor MBOX usando MboxrdStorageWriter com o caminho de saída especificado e as opções.
  4. Acesse a pasta “Inbox” do arquivo OLM usando pesquisa sem distinção entre maiúsculas e minúsculas.
  5. Percorra todas as mensagens MAPI na pasta “Inbox”.
  6. Converta cada mensagem MAPI em um objeto MailMessage padrão.
  7. Grave cada mensagem convertida no arquivo MBOX.

Exemplo 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:
Se você quiser um MBOX por pasta, crie um escritor separado para cada pasta OLM.
Se preferir um único arquivo, reutilize uma instância de MboxrdStorageWriter e chame WriteMessage repetidamente como mostrado no exemplo de código acima.

Converter OLM para PST

Converter OLM para PST frequentemente requer não apenas copiar mensagens, mas também recriar a hierarquia de pastas. O exemplo de código abaixo demonstra como converter e copiar a estrutura de pastas e mensagens de um arquivo de arquivo OLM do Outlook para um arquivo PST Unicode usando Aspose.Email for .NET.

Membros principais

Etapas

  1. Defina os caminhos dos arquivos para o arquivo OLM de origem e o arquivo PST de destino.
  2. Abra o arquivo de arquivamento OLM para leitura e crie um novo arquivo PST para gravação.
  3. Recupere as pastas de nível superior do arquivo OLM.
  4. Defina uma função auxiliar para encontrar ou criar uma pasta correspondente dentro do PST para um determinado nome de pasta.
  5. Defina uma função recursiva para:
    • Criar ou obter a pasta PST correspondente para cada pasta OLM.
    • Copiar todas as mensagens da pasta OLM para a pasta PST.
    • Chamar a si mesma para cada subpasta na pasta OLM, a fim de manter a árvore de pastas.
  6. Chame a função recursiva em todas as pastas OLM de nível superior, usando a pasta raiz do PST como pai.
  7. Salve toda a hierarquia de pastas e mensagens no novo arquivo PST, preservando os dados MAPI.

Exemplo 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: um PST recém‑criado já inclui uma pasta Itens Excluídos por padrão — portanto, tenha cuidado para não duplicar pastas padrão.

Nota:

Conclusão

Neste artigo, aprendemos como converter arquivos Outlook for Mac (OLM) para os formatos PST e MBOX em C# usando Aspose.Email for .NET. Exploramos como abrir e processar arquivos OLM, extrair mensagens e preservar a hierarquia de pastas ao exportar os dados para novos formatos de armazenamento de e‑mail. Com a API Aspose.Email, os desenvolvedores podem automatizar facilmente migrações de e‑mail entre plataformas, garantindo compatibilidade entre Outlook for Mac, Outlook for Windows e clientes de código aberto como o Thunderbird.

Para mais detalhes, explore a documentação do Aspose.Email e a referência da API.

Recursos Adicionais

Veja Também