Конвертиране на OLM към PST

Конвертиране на OLM към PST

OLM (Outlook for Mac) е файлов формат, използван от Microsoft Outlook for Mac за съхранение на имейл съобщения, контакти, календари, задачи и други данни. Това е родният файлов формат за Outlook for Mac, затова не е възможно да се отвори OLM файл в Outlook за Windows. За работа с OLM файлове в Windows, Aspose Email предоставя инструменти, специално проектирани за обработка на OLM файлове. Подходът им е да конвертират OLM файлове към PST (Outlook Data File) формат, който се поддържа широко в Windows среди. След като бъде конвертиран в PST формат, можете да импортирате данните в Outlook за Windows или друг съвместим имейл клиент.

Основен подход

Следният примерен код демонстрира как да се конвертира Outlook OLM файл към PST файл с помощта на библиотеката Aspose.Email. Той чете всяка папка и съответните съобщения от OLM файла и ги добавя към новия PST файл в същия ред.

  1. Създайте инстанция на OlmStorage клас за отваряне на изходния OLM файл.
  2. Използвайте PersonalStorage.create метод за създаване на нов PST файл с указано име на файл и версия на формата.
  3. Рекурсивно прочетете всяка папка и нейните съобщения от OLM файла.
  4. Използвайте функцията add_to_pst, за да добавите всяка папка и нейните съобщения към PST файла, запазвайки оригиналната структура.

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)

Този код е основният скрипт за стартиране на процеса по конвертиране на OLM файл към PST файл с използване на библиотеката aspose.email. Той демонстрира как да се отвори OLM файл, създаде нов PST файл и извика функцията add_to_pst, за да изпълни задачата по прехвърляне на данни. Този скрипт служи като входна точка за миграцията, ефективно използвайки функцията за детайлно прехвърляне на папки и съобщения.

Рекурсивно прехвърляне на папки и съобщения

Този подход предоставя по-голям контрол върху процеса на обработка на папки и съобщения по време на миграцията на имейл данни от OLM файл към PST файл. Примерният код по-долу използва функцията add_to_pst, която определя логиката за прехвърляне. Основната й роля е рекурсивно да обхожда папките и съобщенията, като гарантира, че те са правилно прехвърлени и репликирани в 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)

Определяне на типове папки в PST

При конвертиране на OLM файл към PST трябва да осигурим запазване на структурата на папките и че всяка папка в PST файла има правилния тип. За разлика от PST, папките в OLM нямат предварително дефинирани типове. За да категоризирате и прехвърлите данните правилно, следвайте стъпките по-долу:

  1. Прочетете първото съобщение от OLM папка и определете неговия тип.
  2. Използвайте този тип съобщение, за да изчислите подходящия тип папка в PST чрез метод за класификация.
  3. Създайте папка от определения тип в PST файла.
  4. Добавете съобщението към новосъздадената PST папка.

За останалите съобщения в OLM папката предполагаме, че те принадлежат към същата категория, тъй като типът на папката вече е определен.

Функцията get_container_class помага при категоризацията на Outlook елементи, като свързва различните класове съобщения с правилните типове 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"