Die Migration von E-Mail-Daten aus Outlook for Mac (OLM) in weit verbreitete Formate wie MBOX (für Thunderbird / Unix-Postfächer) und PST (Outlook für Windows) ist eine gängige Aufgabe beim Wechsel zwischen Plattformen. Microsoft Outlook für Mac verwendet das OLM (Outlook for Mac Data File)-Format, um E‑Mails, Kontakte, Kalender und andere Elemente zu speichern. Allerdings erfordert die Migration dieser Daten in Windows‑basierte Umgebungen oder zu anderen E‑Mail‑Clients häufig die Konvertierung von OLM‑Dateien in universell unterstützte Formate wie MBOX (von Clients wie Thunderbird und Apple Mail verwendet) oder PST (Outlook Personal Storage Table für Windows).
In diesem Artikel zeigen wir Ihnen, wie Sie OLM‑Dateien in PST‑ und MBOX‑Formate in C# mit Aspose.Email for .NET konvertieren, einer leistungsstarken API, die komplexe E‑Mail‑Migrationsaufgaben programmgesteuert vereinfacht. Sie lernen, wie Sie OLM‑Dateien öffnen, Nachrichten extrahieren, Ordnerhierarchien beibehalten und portable E‑Mail‑Archive für mehrere Plattformen erstellen.
Verwendung von Aspose.Email for .NET für die Konvertierung
[Aspose.Email for .NET][] bietet umfassende Funktionen zur Arbeit mit verschiedenen E‑Mail‑Formaten, einschließlich OLM, MBOX und PST. Es vereinfacht komplexe Konvertierungsaufgaben mit seiner intuitiven API und umfangreichen Dokumentation. Im Folgenden führen wir die Schritte zur Konvertierung von OLM zu MBOX und PST mit C# durch.
Um loszulegen, installieren Sie das Aspose.Email NuGet‑Paket in Ihrem .NET‑Projekt:
Install-Package Aspose.Email
Dieses Paket enthält alle notwendigen Klassen zur Verarbeitung von OLM-, MBOX- und PST-Dateien.
OLM in MBOX konvertieren
Das MBOX‑Format speichert E‑Mail‑Nachrichten als zusammengefügte MIME‑Einträge und wird häufig von Open‑Source‑E‑Mail‑Clients verwendet. Im Folgenden finden Sie ein einfaches, aber effizientes Code‑Beispiel, das alle Nachrichten aus einem OLM‑Ordner in eine MBOX‑Datei konvertiert. Es nutzt die folgenden API‑Member:
- OlmStorage.FromFile(…) - Öffnet ein OLM-Archiv und gibt Ihnen Zugriff auf dessen Ordnerstruktur und Elemente. Sie können es verwenden, um Ordner aufzulisten oder Nachrichten aus einer OLM-Datei zu extrahieren.
- GetFolder(string name, bool ignoreCase) - Gibt ein OlmFolder für den angeforderten Ordnernamen zurück.
- OlmFolder.EnumerateMapiMessages() - Durchläuft MapiMessage-Elemente in diesem Ordner.
- MapiMessage.ToMailMessage(MailConversionOptions) - Konvertiert ein MapiMessage in ein MailMessage (MIME).
- MboxrdStorageWriter.WriteMessage(MailMessage) - Schreibt ein MIME-MailMessage in den MBOX-Stream.
Schritte
- Definieren Sie die Dateipfade für die Eingabe‑OLM‑Datei und die Ausgabe‑MBOX‑Datei.
- Öffnen Sie die OLM‑Datei mit
OlmStorage.FromFile. - Erstellen Sie einen MBOX‑Writer mit
MboxrdStorageWriterunter Angabe des gewünschten Ausgabepfads und der Optionen. - Greifen Sie auf den Ordner „Inbox“ in der OLM‑Datei zu, wobei die Suche nicht zwischen Groß‑ und Kleinschreibung unterscheidet.
- Durchlaufen Sie alle MAPI‑Nachrichten im Ordner „Inbox“.
- Konvertieren Sie jede MAPI‑Nachricht in ein Standard‑
MailMessage‑Objekt. - Schreiben Sie jede konvertierte Nachricht in die MBOX‑Datei.
Codebeispiel
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);
}
}
Hinweis:
Wenn Sie für jeden Ordner ein MBOX erstellen möchten, erstellen Sie für jeden OLM‑Ordner einen separaten Writer.
Wenn Sie ein einzelnes Archiv bevorzugen, verwenden Sie dieselbe MboxrdStorageWriter-Instanz erneut und rufen Sie WriteMessage wiederholt auf, wie im obigen Codebeispiel gezeigt.
OLM in PST konvertieren
Das Konvertieren von OLM nach PST erfordert häufig nicht nur das Kopieren von Nachrichten, sondern auch das Wiederherstellen der Ordnerhierarchie. Das untenstehende Codebeispiel zeigt, wie Sie die Ordnerstruktur und Nachrichten aus einer Outlook‑OLM‑Archivdatei in eine Unicode‑PST‑Datei konvertieren und kopieren können, wobei Aspose.Email for .NET verwendet wird.
Wichtige Mitglieder
- PersonalStorage.Create(path, FileFormatVersion.Unicode) – Erstellt eine neue Unicode‑PST‑Datei und gibt eine PersonalStorage‑Instanz zurück. Verwenden Sie PersonalStorage.Load(…), um vorhandene PST‑Dateien zu öffnen. Die Klasse PersonalStorage ist der Einstiegspunkt für die Arbeit mit PST‑Dateien.
- PersonalStorage.RootFolder – Gibt den Stamm‑FolderInfo für das PST zurück. Mit FolderInfo.AddSubFolder(name) können Unterordner erstellt werden. FolderInfo.GetSubFolders() liefert die Unterordner, sodass Sie prüfen können, ob bereits ein Ordner mit demselben Namen existiert.
- OlmStorage.GetFolders() – Gibt die oberste Ebene der OlmFolder‑Sammlung zurück (die OLM‑Ordnerhierarchie). Die Eigenschaft OlmFolder.SubFolders enthält die Unterordner (für rekursives Durchlaufen).
- OlmFolder.EnumerateMapiMessages() – Liefert MapiMessage‑Instanzen.
- FolderInfo.AddMessage(MapiMessage) – Fügt einer PST‑Ordner ein MapiMessage hinzu.
Schritte
- Legen Sie die Dateipfade für die Quell‑OLM‑Datei und die Ziel‑PST‑Datei fest.
- Öffnen Sie das OLM‑Archiv zum Lesen und erstellen Sie eine neue PST‑Datei zum Schreiben.
- Rufen Sie die obersten Ordner aus dem OLM‑Archiv ab.
- Definieren Sie eine Hilfsfunktion, um einen passenden Ordner im PST zu finden oder zu erstellen.
- Definieren Sie eine rekursive Funktion, die:
- den entsprechenden PST‑Ordner für jeden OLM‑Ordner erstellt oder abruft,
- alle Nachrichten vom OLM‑Ordner in den PST‑Ordner kopiert und
- sich selbst für jeden Unterordner im OLM‑Ordner aufruft, um die Ordnerstruktur beizubehalten.
- Rufen Sie die rekursive Funktion für alle obersten OLM‑Ordner auf und verwenden Sie den PST‑Stammordner als übergeordnetes Element.
- Speichern Sie die gesamte Ordnerhierarchie und die Nachrichten in der neuen PST‑Datei, wobei die MAPI‑Daten erhalten bleiben.
Codebeispiel
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);
}
}
Wichtig: Ein neu erstelltes PST enthält standardmäßig bereits einen Gelöschte Elemente‑Ordner — achten Sie darauf, die Standardordner nicht zu duplizieren.
Hinweis:
Erhaltung von Ordnerarten: OLM‑Unterordner können bestimmten speziellen Outlook‑Ordnern (Posteingang, Gesendete Elemente, Kalender) zugeordnet werden. Wenn Sie >vordefinierte IPM‑Ordner erstellen möchten (damit Outlook sie als Standardordner erkennt), verwenden Sie PersonalStorage.CreatePredefinedFolder oder GetPredefinedFolder je nach Szenario. CreatePredefinedFolder gibt ein FolderInfo zurück. Verwenden Sie das StandardIpmFolder‑Enum, wenn es passend ist.
Leistung: AddMessages (Bulk‑>Hinzufügen) ist schneller als viele Aufrufe von AddMessage. Erwägen Sie, Nachrichten in Stapeln zu sammeln und FolderInfo.AddMessages(IEnumerable) zu verwenden, um die Festplatten‑E/A zu reduzieren.
Fazit
In diesem Artikel haben wir gelernt, wie man Outlook for Mac (OLM)-Dateien in PST- und MBOX-Formate in C# mit Aspose.Email for .NET konvertiert. Wir haben untersucht, wie man OLM-Archive öffnet und verarbeitet, Nachrichten extrahiert und Ordnerhierarchien beibehält, während man Daten in neue Mail‑Speicherformate exportiert. Mit der Aspose.Email API können Entwickler die plattformübergreifende E‑Mail‑Migration einfach automatisieren und die Kompatibilität zwischen Outlook for Mac, Outlook for Windows und Open‑Source‑Clients wie Thunderbird sicherstellen.
Für weitere Details, erkunden Sie die Aspose.Email Dokumentation und die API‑Referenz.
