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:
- OlmStorage.FromFile(…) - Otevře archiv OLM a poskytne vám přístup k jeho stromu složek a položkám. Můžete jej použít k výčtu složek nebo k extrahování zpráv z OLM souboru.
- GetFolder(string name, bool ignoreCase) - Vrátí OlmFolder pro požadovaný název složky.
- OlmFolder.EnumerateMapiMessages() - Iteruje položky MapiMessage v této složce.
- MapiMessage.ToMailMessage(MailConversionOptions) - Převede MapiMessage na MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - Zapíše MIME MailMessage do MBOX proudu.
Kroky
- Definujte cesty k souborům pro vstupní soubor OLM a výstupní soubor MBOX.
- Otevřete soubor OLM pomocí
OlmStorage.FromFile. - Vytvořte zapisovač MBOX pomocí
MboxrdStorageWriterse zadanou výstupní cestou a možnostmi. - Přistupte ke složce „Inbox“ v souboru OLM pomocí vyhledávání bez rozlišení velikosti písmen.
- Projděte všechny MAPI zprávy ve složce „Inbox“.
- Převěďte každou MAPI zprávu na standardní objekt
MailMessage. - 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
- PersonalStorage.Create(path, FileFormatVersion.Unicode) – Vytvoří nový Unicode PST soubor a vrátí instanci PersonalStorage. Použijte PersonalStorage.Load(…) pro otevření existujících PST souborů. Třída PersonalStorage je vstupním bodem pro práci se soubory PST.
- PersonalStorage.RootFolder – Poskytuje kořenový FolderInfo pro PST. Použijte FolderInfo.AddSubFolder(name) pro vytvoření podadresářů. FolderInfo.GetSubFolders() vrací podřízené položky, takže můžete zkontrolovat, zda již existuje složka se stejným názvem.
- OlmStorage.GetFolders() – Vrací kolekci OlmFolder nejvyšší úrovně (hierarchii složek OLM). Vlastnost OlmFolder.SubFolders obsahuje podřízené položky (takže můžete rekurzivně procházet).
- OlmFolder.EnumerateMapiMessages() – Vrací instance MapiMessage.
- FolderInfo.AddMessage(MapiMessage) – Přidá MapiMessage do složky PST.
Kroky
- Nastavte cesty k souborům pro zdrojový OLM soubor a cílový PST soubor.
- Otevřete archiv OLM pro čtení a vytvořte nový PST soubor pro zápis.
- Získejte složky nejvyšší úrovně z archivu OLM.
- Definujte pomocnou funkci, která najde nebo vytvoří odpovídající složku v PST pro daný název složky.
- 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.
- Zavolejte rekurzivní funkci na všechny složky OLM nejvyšší úrovně, přičemž kořenová složka PST slouží jako rodič.
- 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:
Zachování typů složek: Podsložky OLM mohou být mapovány na konkrétní speciální složky Outlooku (Doručená pošta, Odeslané položky, Kalendář). Pokud chcete vytvořit předdefinované IPM složky (aby je Outlook rozpoznal jako standardní složky), použijte PersonalStorage.CreatePredefinedFolder nebo GetPredefinedFolder podle scénáře. CreatePredefinedFolder vrací FolderInfo. Použijte výčet StandardIpmFolder, pokud je to vhodné.
Výkon: AddMessages (hromadné přidání) je rychlejší než mnoho volání AddMessage. Zvažte shromažďování zpráv do dávkových bloků a použití FolderInfo.AddMessages(IEnumerable) ke snížení diskových I/O operací.
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.
