Конвертировать OLM в PST

Конвертировать OLM в PST

OLM (Outlook для Mac) — это формат файлов, используемый Microsoft Outlook для Mac для хранения сообщений электронной почты, контактов, календарей, задач и других данных. Это собственный формат файлов Outlook для Mac, поэтому открыть файл Outlook для Mac (OLM) в Outlook для Windows невозможно. Для работы с файлами OLM в Windows Aspose Email предоставляет инструменты, специально разработанные для обработки файлов OLM. Его подход заключается в преобразовании файлов OLM в формат PST (файл данных Outlook), который широко поддерживается в средах Windows. После преобразования в формат PST вы можете импортировать данные в Outlook для Windows или любой другой совместимый почтовый клиент. В следующем примере кода показано, как преобразовать OLM в PST.

Перенос данных электронной почты из формата OLM в формат PST


import aspose.email as ae

# create an instance of OlmStorage class to open source OLM
olm = ae.storage.olm.OlmStorage("my.olm")
# create a new PST file
pst = ae.storage.pst.PersonalStorage.create("my.pst", ae.storage.pst.FileFormatVersion.UNICODE)

# recursively reads each folder and its messages
# and adds them to the PST in the same order

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

Реализация get_container_class для классификации различных типов элементов Outlook

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"

Реализация функции add_to_pst для переноса данных из файла OLM в файл PST


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)