Migrating email data from Outlook for Mac (OLM) to widely supported formats like MBOX (for Thunderbird / Unix mailboxes) and PST (Outlook for Windows) is a common task when moving between platforms. Microsoft Outlook for Mac uses the OLM (Outlook for Mac Data File) format to store emails, contacts, calendars, and other items. However, migrating this data to Windows-based environments or other email clients often requires converting OLM files to universally supported formats like MBOX (used by clients such as Thunderbird and Apple Mail) or PST (Outlook Personal Storage Table for Windows).

V tomto článku vám ukážeme, jak převést soubory OLM do formátů PST a MBOX v C# pomocí Aspose.Email for .NET, výkonného API, které programově zjednodušuje složité úkoly migrace e‑mailů. Naučíte se, jak otevřít soubory OLM, extrahovat zprávy, zachovat hierarchii složek a vytvořit přenosné archivní soubory e‑mailů pro různé platformy.

Použití Aspose.Email for .NET pro konverzi

[Aspose.Email for .NET][] poskytuje komplexní funkce pro práci s různými formáty e‑mailů, včetně OLM, MBOX a PST. Zjednodušuje složité úlohy převodu díky svému intuitivnímu API a rozsáhlé dokumentaci. Níže projdeme kroky pro převod OLM na MBOX a PST pomocí C#.

Chcete-li začít, nainstalujte balíček Aspose.Email NuGet do svého projektu .NET:

Install-Package Aspose.Email

Tento balíček obsahuje všechny potřebné třídy pro práci se soubory OLM, MBOX a PST.

Převést OLM na MBOX

Formát MBOX ukládá e‑mailové zprávy jako spojené položky MIME, které jsou běžně používány open‑source e‑mailovými klienty. Níže je jednoduchý, ale efektivní příklad kódu, který převádí všechny zprávy ze složky OLM do souboru MBOX. Využívá následující členy API:

Kroky

  1. Definujte cesty k souborům pro vstupní soubor OLM a výstupní soubor MBOX.
  2. Otevřete soubor OLM pomocí OlmStorage.FromFile.
  3. Vytvořte zapisovač MBOX pomocí MboxrdStorageWriter se zadanou výstupní cestou a možnostmi.
  4. Přistupte ke složce „Inbox“ v souboru OLM pomocí vyhledávání bez rozlišení velikosti písmen.
  5. Projděte všechny MAPI zprávy ve složce „Inbox“.
  6. Převěďte každou MAPI zprávu na standardní objekt MailMessage.
  7. Zapište každou převedenou zprávu do souboru MBOX.

Ukázkový kód

var olmPath = @"C:\data\archive.olm";
var mboxPath = @"C:\data\output.mbox";

// Load OLM file using OlmStorage
using (var olm = OlmStorage.FromFile(olmPath))
using (var mboxWriter = new MboxrdStorageWriter(mboxPath, new MboxSaveOptions()))
{
    // Get the folder (case-insensitive example)
    var inbox = olm.GetFolder("Inbox", true);

    // Iterate MAPI messages (returns MapiMessage objects)
    foreach (MapiMessage mapi in inbox.EnumerateMapiMessages())
    {
        // Convert to MailMessage and write to MBOX
        var mail = mapi.ToMailMessage(new MailConversionOptions());
        mboxWriter.WriteMessage(mail);
    }
}

Poznámka: Pokud chcete jeden MBOX na složku, vytvořte samostatného zapisovače pro každou složku OLM.
Pokud dáváte přednost jedinému archivu, znovu použijte jednu instanci MboxrdStorageWriter a opakovaně volajte WriteMessage tak, jak je ukázáno ve výše uvedeném ukázkovém kódu.

Převod OLM na PST

Převod OLM na PST často vyžaduje nejen kopírování zpráv, ale také obnovení hierarchie složek. Níže uvedený ukázkový kód demonstruje, jak převést a zkopírovat strukturu složek a zprávy z archivu Outlook OLM do souboru Unicode PST pomocí Aspose.Email for .NET.

Klíčové členy

Kroky

  1. Nastavte cesty k souborům pro zdrojový OLM soubor a cílový PST soubor.
  2. Otevřete archiv OLM pro čtení a vytvořte nový PST soubor pro zápis.
  3. Získejte složky nejvyšší úrovně z archivu OLM.
  4. Definujte pomocnou funkci, která najde nebo vytvoří odpovídající složku v PST pro daný název složky.
  5. Definujte rekurzivní funkci, která:
    • Vytvoří nebo získá odpovídající PST složku pro každou složku OLM.
    • Zkopíruje všechny zprávy ze složky OLM do složky PST.
    • Zavolá sama sebe pro každou podložku ve složce OLM, aby zachovala strom složek.
  6. Zavolejte rekurzivní funkci na všechny složky OLM nejvyšší úrovně, přičemž kořenová složka PST slouží jako rodič.
  7. Uložte celou hierarchii složek a zprávy do nového PST souboru, přičemž zachováte MAPI data.

Ukázkový kód

var olmPath = @"C:\data\archive.olm";
var pstPath = @"C:\data\output.pst";

// Create a new PST file
using (var olm = OlmStorage.FromFile(olmPath))
using (var pst = PersonalStorage.Create(pstPath, FileFormatVersion.Unicode))
{
    // Get top-level folders in OLM
    var rootFolders = olm.GetFolders();

    // Helper: map OlmFolder -> FolderInfo in PST by recursively creating subfolders
    FolderInfo GetOrCreatePstFolder(FolderInfo parentPstFolder, string folderName)
    {
        // Try to find existing subfolder (case-insensitive)
        foreach (var sub in parentPstFolder.GetSubFolders())
        {
            if (string.Equals(sub.DisplayName, folderName, StringComparison.OrdinalIgnoreCase))
                return sub;
        }

        // Create new subfolder
        return parentPstFolder.AddSubFolder(folderName);
    }

    // Recursive traversal
    void ProcessOlmFolder(OlmFolder olmFolder, FolderInfo pstParent)
    {
        // Create / get the corresponding PST folder
        var pstFolder = GetOrCreatePstFolder(pstParent, olmFolder.Name);

        // Copy messages: OlmFolder.EnumerateMapiMessages returns MapiMessage instances
        foreach (var mapi in olmFolder.EnumerateMapiMessages())
        {
            // AddMessage preserves MAPI data into PST
            pstFolder.AddMessage(mapi);
        }

        // Recurse into OLM subfolders (OlmFolder.SubFolders property)
        foreach (var child in olmFolder.SubFolders)
        {
            ProcessOlmFolder(child, pstFolder);
        }
    }

    // Note: PST.RootFolder exists; create top-level folders under it.
    foreach (var top in rootFolders)
    {
        // Skip creating a duplicate for default PST root folder names if needed
        ProcessOlmFolder(top, pst.RootFolder);
    }
}

Důležité: nově vytvořený PST již obsahuje složku Deleted Items ve výchozím nastavení — proto buďte opatrní, abyste nezdvojovali výchozí složky.

Poznámka:

Závěr

V tomto článku jsme se naučili, jak převést soubory Outlook for Mac (OLM) do formátů PST a MBOX v C# pomocí Aspose.Email for .NET. Prozkoumali jsme, jak otevřít a zpracovat OLM archivy, extrahovat zprávy a zachovat hierarchii složek při exportu dat do nových formátů úložiště pošty. S Aspose.Email API mohou vývojáři snadno automatizovat migrace e‑mailů napříč platformami, což zajišťuje kompatibilitu mezi Outlook for Mac, Outlook for Windows a open‑source klienty jako je Thunderbird.

Pro další podrobnosti si prohlédněte dokumentaci Aspose.Email a referenční příručku API.

Další zdroje

Viz také