Converter OLM para PST

Converter OLM para PST

OLM (Outlook for Mac) é um formato de arquivo usado pelo Microsoft Outlook para Mac para armazenar mensagens de e‑mail, contatos, calendários, tarefas e outros dados. É o formato nativo do Outlook para Mac, portanto não é possível abrir um arquivo Outlook para Mac (OLM) no Outlook para Windows. Para trabalhar com arquivos OLM no Windows, o Aspose Email fornece ferramentas projetadas especificamente para manipular arquivos OLM. Sua abordagem consiste em converter arquivos OLM para o formato PST (Outlook Data File), amplamente suportado em ambientes Windows. Uma vez convertido para PST, você pode importar os dados para o Outlook para Windows ou qualquer outro cliente de e‑mail compatível.

Abordagem principal

O exemplo de código a seguir demonstra como converter um arquivo Outlook OLM para PST usando a biblioteca Aspose.Email. Ele lê cada pasta e as mensagens correspondentes do arquivo OLM e as adiciona ao novo arquivo PST na mesma ordem.

  1. Crie uma instância do OlmStorage classe para abrir o arquivo OLM de origem.
  2. Use o PersonalStorage.create método para criar um novo arquivo PST com um nome de arquivo e versão de formato especificados.
  3. Leia recursivamente cada pasta e suas mensagens do arquivo OLM.
  4. Use a função add_to_pst para adicionar cada pasta e suas mensagens ao arquivo PST, mantendo a estrutura original.

import aspose.email as ae

olm = ae.storage.olm.OlmStorage("my.olm")

pst = ae.storage.pst.PersonalStorage.create("my.pst", ae.storage.pst.FileFormatVersion.UNICODE)

for folder in olm.folder_hierarchy:
    add_to_pst(pst.root_folder, folder)

Este código é o script principal para iniciar o processo de conversão de um arquivo OLM para PST usando a biblioteca aspose.email. Ele demonstra como abrir um arquivo OLM, criar um novo arquivo PST e chamar a função add_to_pst para executar a tarefa de transferência de dados. Este script serve como ponto de entrada para a migração, usando a função de forma eficiente para lidar com a transferência detalhada de pastas e mensagens.

Transferência recursiva de pastas e mensagens

Esta abordagem oferece um controle mais aprofundado sobre o processo de manipulação de pastas e mensagens ao migrar dados de e‑mail de um arquivo OLM para um arquivo PST. O exemplo de código abaixo utiliza a função add_to_pst, que define a lógica de transferência. Seu papel principal é percorrer recursivamente pastas e mensagens, garantindo que sejam transferidas e replicadas corretamente no formato PST. Esta função é altamente reutilizável e deve ser usada como parte de uma aplicação ou script maior que gerencia a abertura e criação desses arquivos.


def add_to_pst(pst_folder, olm_folder):
    pst_sub_folder = pst_folder.get_sub_folder(olm_folder.name)

    for msg in olm_folder.enumerate_mapi_messages():
        if pst_sub_folder is None:
            pst_sub_folder = pst_folder.add_sub_folder(olm_folder.name, get_container_class(msg.message_class))

        pst_sub_folder.add_message(msg)

    if pst_sub_folder is None:
        pst_sub_folder = pst_folder.add_sub_folder(olm_folder.name)

    for olm_sub_folder in olm_folder.sub_folders:
        add_to_pst(pst_sub_folder, olm_sub_folder)

Determinar tipos de pastas no PST

Ao converter um arquivo OLM para PST, devemos garantir que a estrutura de pastas seja preservada e que cada pasta no arquivo PST tenha o tipo correto. Ao contrário do PST, as pastas no OLM não têm tipos predefinidos. Para categorizar e transferir dados corretamente, siga os passos abaixo:

  1. Leia a primeira mensagem de uma pasta OLM e determine seu tipo.
  2. Use este tipo de mensagem para calcular o tipo de pasta apropriado no PST usando um método de classificação.
  3. Crie uma pasta do tipo determinado no arquivo PST.
  4. Adicione a mensagem à pasta PST recém‑criada.

Para as mensagens restantes na pasta OLM, assumimos que elas pertencem à mesma categoria, já que o tipo da pasta já foi definido.

A função get_container_class ajuda a categorizar itens do Outlook ao mapear diferentes classes de mensagens para os tipos corretos de pastas PST:

def get_container_class(message_class):
    if message_class.startswith("IPM.Contact") or message_class.startswith("IPM.DistList"):
        return "IPF.Contact"

    if message_class.startswith("IPM.StickyNote"):
        return "IPF.StickyNote"

    if message_class.startswith("IPM.Activity"):
        return "IPF.Journal"

    if message_class.startswith("IPM.Task"):
        return "IPF.Task"

    if message_class.startswith("IPM.Appointment") or message_class.startswith("IPM.Schedule.meeting"):
        return "IPF.Appointment"

    return "IPF.Note"