Konvertera OLM till PST

Konvertera OLM till PST

OLM (Outlook for Mac) är ett filformat som används av Microsoft Outlook för Mac för att lagra e‑postmeddelanden, kontakter, kalendrar, uppgifter och annan data. Det är det inhemska filformatet för Outlook för Mac, så det är inte möjligt att öppna en Outlook för Mac (OLM)-fil i Outlook för Windows. För att arbeta med OLM‑filer i Windows tillhandahåller Aspose Email verktyg som är speciellt utformade för att hantera OLM‑filer. Dess tillvägagångssätt är att konvertera OLM‑filer till PST (Outlook Data File)-format, vilket är brett stöd i Windows‑miljöer. När de har konverterats till PST‑format kan du importera data till Outlook för Windows eller någon annan kompatibel e‑postklient.

Primära tillvägagångssätt

Följande kodexempel visar hur man konverterar en Outlook OLM‑fil till en PST‑fil med Aspose.Email‑biblioteket. Det läser varje mapp och motsvarande meddelanden från OLM‑filen och lägger till dem i den nya PST‑filen i samma ordning.

  1. Skapa en instans av OlmStorage klass för att öppna käll‑OLM‑filen.
  2. Använd PersonalStorage.create metod för att skapa en ny PST‑fil med ett specificerat filnamn och formatversion.
  3. Läs rekursivt varje mapp och dess meddelanden från OLM‑filen.
  4. Använd funktionen add_to_pst för att lägga till varje mapp och dess meddelanden i PST‑filen, och behålla den ursprungliga strukturen.

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)

Denna kod är huvudskriptet för att starta processen att konvertera en OLM‑fil till en PST‑fil med aspose.email‑biblioteket. Den visar hur man öppnar en OLM‑fil, skapar en ny PST‑fil och anropar funktionen add_to_pst för att utföra dataöverföringen. Skriptet fungerar som startpunkt för migreringen och använder funktionen effektivt för att hantera den detaljerade överföringen av mappar och meddelanden.

Rekursiv mapp- och meddelandeöverföring

Detta tillvägagångssätt ger djupare kontroll över mapp- och meddelandehanteringsprocessen vid migrering av e‑postdata från en OLM‑fil till en PST‑fil. Kodexemplet nedan använder funktionen add_to_pst som definierar överföringslogiken. Dess huvuduppgift är att rekursivt gå igenom mappar och meddelanden, så att de överförs och reproduceras korrekt i PST‑formatet. Funktionen är mycket återanvändbar och är avsedd att användas som en del av en större applikation eller skript som hanterar öppning och skapande av dessa filer.


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)

Bestäm mapptyper i PST

När du konverterar en OLM‑fil till PST måste vi säkerställa att mapparnas struktur bevaras och att varje mapp i PST‑filen har rätt typ. Till skillnad från PST har mappar i OLM inga fördefinierade typer. För att korrekt kategorisera och överföra data, följ stegen nedan:

  1. Läs det första meddelandet från en OLM‑mapp och bestäm dess typ.
  2. Använd denna meddelandetyp för att beräkna lämplig mapptyp i PST med en klassificeringsmetod.
  3. Skapa en mapp av den bestämda typen i PST‑filen.
  4. Lägg till meddelandet i den nyss skapade PST‑mappen.

För de återstående meddelandena i OLM‑mappen antar vi att de tillhör samma kategori, eftersom mapptypen redan har fastställts.

Funktionen get_container_class hjälper till att kategorisera Outlook‑element genom att mappa olika meddelandeklasser till rätt PST‑mapptyper:

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"