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:
- OlmStorage.FromFile(…) - Abre um arquivo OLM e fornece acesso à sua árvore de pastas e itens. Você pode usá‑lo para enumerar pastas ou extrair mensagens de um arquivo OLM.
- GetFolder(string name, bool ignoreCase) - Retorna um OlmFolder para o nome da pasta solicitada.
- OlmFolder.EnumerateMapiMessages() - Itera itens MapiMessage nessa pasta.
- MapiMessage.ToMailMessage(MailConversionOptions) - Converte um MapiMessage em um MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - Grava um MailMessage MIME no fluxo MBOX.
Etapas
- Defina os caminhos dos arquivos para o arquivo OLM de entrada e o arquivo MBOX de saída.
- Abra o arquivo OLM usando
OlmStorage.FromFile. - Crie um escritor MBOX usando
MboxrdStorageWritercom o caminho de saída especificado e as opções. - Acesse a pasta “Inbox” do arquivo OLM usando pesquisa sem distinção entre maiúsculas e minúsculas.
- Percorra todas as mensagens MAPI na pasta “Inbox”.
- Converta cada mensagem MAPI em um objeto
MailMessagepadrão. - 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
- PersonalStorage.Create(path, FileFormatVersion.Unicode) - Cria um novo arquivo PST Unicode e retorna uma instância de PersonalStorage. Use PersonalStorage.Load(…) para abrir PSTs existentes. A classe PersonalStorage é o ponto de entrada para trabalhar com arquivos PST.
- PersonalStorage.RootFolder - Fornece a FolderInfo raiz do PST. Use FolderInfo.AddSubFolder(name) para criar subpastas. FolderInfo.GetSubFolders() retorna os filhos, permitindo verificar se já existe uma pasta com o mesmo nome.
- OlmStorage.GetFolders() - Retorna a coleção de OlmFolder de nível superior (a hierarquia de pastas OLM). A propriedade OlmFolder.SubFolders contém os filhos (para que você possa descer recursivamente).
- OlmFolder.EnumerateMapiMessages() - Produz instâncias de MapiMessage.
- FolderInfo.AddMessage(MapiMessage) - Adiciona um MapiMessage a uma pasta PST.
Etapas
- Defina os caminhos dos arquivos para o arquivo OLM de origem e o arquivo PST de destino.
- Abra o arquivo de arquivamento OLM para leitura e crie um novo arquivo PST para gravação.
- Recupere as pastas de nível superior do arquivo OLM.
- Defina uma função auxiliar para encontrar ou criar uma pasta correspondente dentro do PST para um determinado nome de pasta.
- 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.
- Chame a função recursiva em todas as pastas OLM de nível superior, usando a pasta raiz do PST como pai.
- 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:
Preservando tipos de pasta: As subpastas OLM podem mapear para pastas especiais específicas do Outlook (Caixa de Entrada, Itens Enviados, Calendário). Se você deseja >criar pastas IPM predefinidas (para que o Outlook as reconheça como pastas padrão), use PersonalStorage.CreatePredefinedFolder ou GetPredefinedFolder dependendo do cenário. CreatePredefinedFolder retorna um FolderInfo. Use o enum StandardIpmFolder quando apropriado.
Desempenho: AddMessages (adição em lote >) é mais rápido que várias chamadas a AddMessage. Considere coletar mensagens em lotes e usar FolderInfo.AddMessages(IEnumerable) para reduzir I/O de disco.
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.
