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.
- Crie uma instância do OlmStorage classe para abrir o arquivo OLM de origem.
- Use o PersonalStorage.create método para criar um novo arquivo PST com um nome de arquivo e versão de formato especificados.
- Leia recursivamente cada pasta e suas mensagens do arquivo OLM.
- 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:
- Leia a primeira mensagem de uma pasta OLM e determine seu tipo.
- Use este tipo de mensagem para calcular o tipo de pasta apropriado no PST usando um método de classificação.
- Crie uma pasta do tipo determinado no arquivo PST.
- 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"