Převést OLM na PST

Převést OLM na PST

OLM (Outlook pro Mac) je formát souboru používaný Microsoft Outlook pro Mac k ukládání e‑mailových zpráv, kontaktů, kalendářů, úkolů a dalších údajů. Je to nativní formát souboru pro Outlook pro Mac, takže není možné otevřít soubor OLM (Outlook pro Mac) v Outlooku pro Windows. Pro práci s OLM soubory ve Windows poskytuje Aspose Email nástroje speciálně určené pro manipulaci s OLM soubory. Jeho postup spočívá v převodu OLM souborů na formát PST (Outlook Data File), který je široce podporován v prostředí Windows. Po převodu do formátu PST můžete data importovat do Outlooku pro Windows nebo jakéhokoli jiného kompatibilního e‑mailového klienta.

Primární přístup

Následující ukázkový kód demonstruje, jak převést soubor Outlook OLM na PST pomocí knihovny Aspose.Email. Načte každou složku a odpovídající zprávy ze souboru OLM a přidá je do nového souboru PST ve stejném pořadí.

  1. Vytvořte instanci OlmStorage class pro otevření zdrojového souboru OLM.
  2. Použijte PersonalStorage.create metoda pro vytvoření nového souboru PST s určeným názvem souboru a verzí formátu.
  3. Rekurzivně načtěte každou složku a její zprávy ze souboru OLM.
  4. Použijte funkci add_to_pst k přidání každé složky a jejích zpráv do souboru PST při zachování původní struktury.

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)

Tento kód je hlavním skriptem pro zahájení procesu převodu souboru OLM na PST pomocí knihovny aspose.email. Ukazuje, jak otevřít soubor OLM, vytvořit nový soubor PST a zavolat funkci add_to_pst pro provedení úlohy přenosu dat. Tento skript slouží jako vstupní bod migrace a efektivně využívá funkci k podrobnému přenosu složek a zpráv.

Rekurzivní přenos složek a zpráv

Tento přístup poskytuje podrobnější kontrolu nad procesem zpracování složek a zpráv při migraci e‑mailových dat ze souboru OLM do souboru PST. Níže uvedený ukázkový kód využívá funkci add_to_pst, která definuje logiku přenosu. Její hlavní úlohou je rekurzivně procházet složky a zprávy, aby byly správně přeneseny a replikovány ve formátu PST. Tato funkce je vysoce znovupoužitelná a je určena k použití jako součást větší aplikace nebo skriptu, který spravuje otevírání a vytváření těchto souborů.


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)

Určení typů složek v PST

Při převodu souboru OLM na PST musíme zajistit, aby byla zachována struktura složek a aby každá složka v souboru PST měla správný typ. Na rozdíl od PST nemají složky v OLM předdefinované typy. Pro správnou kategorizaci a přenos dat postupujte podle následujících kroků:

  1. Přečtěte první zprávu ze složky OLM a určete její typ.
  2. Použijte tento typ zprávy k výpočtu odpovídajícího typu složky v PST pomocí klasifikační metody.
  3. Vytvořte složku určeného typu v souboru PST.
  4. Přidejte zprávu do nově vytvořené složky PST.

Pro zbývající zprávy ve složce OLM předpokládáme, že patří do stejné kategorie, protože typ složky již byl určen.

Funkce get_container_class pomáhá kategorizovat položky Outlooku přiřazením různých tříd zpráv ke správným typům složek 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"