Konwertuj OLM do PST

Konwertuj OLM do PST

OLM (Outlook for Mac) jest formatem pliku używanym przez Microsoft Outlook dla Mac do przechowywania wiadomości e‑mail, kontaktów, kalendarzy, zadań i innych danych. Jest to natywny format pliku dla Outlooka dla Mac, dlatego nie można otworzyć pliku OLM w Outlooku dla Windows. Aby pracować z plikami OLM w systemie Windows, Aspose Email udostępnia narzędzia specjalnie zaprojektowane do obsługi plików OLM. Podejście polega na konwertowaniu plików OLM do formatu PST (Outlook Data File), który jest szeroko wspierany w środowiskach Windows. Po konwersji do formatu PST można zaimportować dane do Outlooka dla Windows lub innego kompatybilnego klienta poczty.

Podstawowe podejście

Poniższy przykład kodu demonstruje, jak skonwertować plik Outlook OLM do PST przy użyciu biblioteki Aspose.Email. Odczytuje on każdy folder i odpowiadające mu wiadomości z pliku OLM i dodaje je do nowego pliku PST w tej samej kolejności.

  1. Utwórz instancję OlmStorage klasa otwierająca źródłowy plik OLM.
  2. Użyj PersonalStorage.create metoda tworząca nowy plik PST o określonej nazwie i wersji formatu.
  3. Rekurencyjnie odczytaj każdy folder i jego wiadomości z pliku OLM.
  4. Użyj funkcji add_to_pst, aby dodać każdy folder i jego wiadomości do pliku PST, zachowując oryginalną strukturę.

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)

Ten kod jest głównym skryptem inicjującym proces konwertowania pliku OLM do PST przy użyciu biblioteki aspose.email. Demonstruje, jak otworzyć plik OLM, utworzyć nowy plik PST i wywołać funkcję add_to_pst, aby wykonać zadanie transferu danych. Skrypt ten służy jako punkt wejścia migracji, efektywnie używając funkcji do obsługi szczegółowego transferu folderów i wiadomości.

Rekurencyjny transfer folderów i wiadomości

To podejście zapewnia większą kontrolę nad procesem obsługi folderów i wiadomości podczas migracji danych e‑mail z pliku OLM do pliku PST. Poniższy przykład kodu wykorzystuje funkcję add_to_pst, która definiuje logikę transferu. Jej podstawowym zadaniem jest rekurencyjne przeszukiwanie folderów i wiadomości, zapewniając ich prawidłowy transfer i replikację w formacie PST. Funkcja ta jest wysoce wielokrotnego użytku i powinna być używana jako część większej aplikacji lub skryptu zarządzającego otwieraniem i tworzeniem tych plików.


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)

Ustal typy folderów w PST

Podczas konwertowania pliku OLM na PST musimy zapewnić zachowanie struktury folderów oraz że każdy folder w pliku PST ma prawidłowy typ. W przeciwieństwie do PST, foldery w OLM nie mają predefiniowanych typów. Aby poprawnie kategoryzować i przenosić dane, wykonaj poniższe kroki:

  1. Odczytaj pierwszą wiadomość z folderu OLM i określ jej typ.
  2. Użyj tego typu wiadomości do obliczenia odpowiedniego typu folderu w PST przy użyciu metody klasyfikacji.
  3. Utwórz folder określonego typu w pliku PST.
  4. Dodaj wiadomość do nowo utworzonego folderu PST.

Dla pozostałych wiadomości w folderze OLM zakładamy, że należą do tej samej kategorii, ponieważ typ folderu został już ustalony.

Funkcja get_container_class pomaga kategoryzować elementy Outlooka, mapując różne klasy komunikatów na właściwe typy folderów 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"