Read MS Outlook OLM Files in C# .NET

OLM ist ein Dateiformat, das Microsoft Outlook für Mac verwendet, um lokale Daten zu speichern. OLM enthält lokale Daten wie E-Mails, Anhänge, Notizen, Kalenderdaten, Kontakte, Aufgaben, Historie usw. OLM-Dateien werden von Outlook für Mac verwendet. Outlook für Windows kann darauf nicht zugreifen oder sie öffnen. Die Version von Outlook für Windows unterstützt nur das PST-Dateiformat zur Speicherung von Daten. In diesem Artikel betrachten wir wie man OLM-Dateiformate aus C#-Anwendungen öffnet und liest.

C# .NET API zum Lesen von OLM-Dateien

Aspose.Email für .NET ist eine robuste API, die eine Vielzahl von Funktionen zur Implementierung von E-Mail-Anwendungen bietet. Außerdem ermöglicht es das Lesen von OLM-Dateien und anderen Mail-Speichermethoden wie MBOX, PST/OST. Sie können die Bibliothek entweder über NuGet installieren oder die DLL herunterladen.

PM> Install-Package Aspose.Email

Öffnen von OLM-Dateiformaten

Die Aspose.Email API bietet zwei Möglichkeiten, OLM-Dateiformate zu öffnen:

Es gibt Unterschiede im Verhalten zwischen diesen Methoden. Siehe den Abschnitt unten.

Öffnen von Dateien über den Konstruktor

Um eine Datei zu öffnen, sollten Sie den Konstruktor der Klasse OlmStorage aufrufen und den vollständigen Dateinamen oder Stream als Argument übergeben:

var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);

Öffnen von Dateien mit der statischen Methode FromFile

Um eine Datei zu öffnen, sollten Sie die statische Methode FromFile verwenden und den vollständigen Dateinamen oder Stream als Argument übergeben:

var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);

Abrufen von Ordnern

Nachdem Sie die Datei über den Konstruktor geöffnet haben, ist die FolderHierarchy-Eigenschaft zugänglich. Sie gibt eine Liste von Verzeichnissen zurück, die in der OLM-Datei vorhanden sind. Jedes Objekt der Klasse OlmFolder in der Liste hat die SubFolders-Eigenschaft, die eine Liste von Unterordnern zurückgibt. So haben wir Zugriff auf alle Verzeichnisse in OLM.

Das folgende Beispiel zeigt die Liste aller Ordner in hierarchischer Reihenfolge:

using (var olm = new OlmStorage(fileName))
{
PrintAllFolders(olm.FolderHierarchy, string.Empty);
}
private void PrintAllFolders(List<OlmFolder> folderHierarchy, string indent)
{
foreach (var folder in folderHierarchy)
{
Console.WriteLine($"{indent}{folder.Name}");
PrintAllFolders(folder.SubFolders, indent+"-");
}
}

Wenn die Datei über die FromFile-Methode geöffnet wird, wird standardmäßig die FolderHierarchy-Eigenschaft nicht initialisiert und gibt null zurück. In diesem Fall ist es notwendig, die GetFolders-Methode explizit aufzurufen:

using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}

Es ist auch möglich, einen beliebigen Ordner nach Namen abzurufen. Dazu sollten Sie:

  • die GetFolder-Methode aufrufen

  • den Ordnernamen als erstes Argument und den Wert, der angibt, ob die Groß- und Kleinschreibung bei der Suche nach einem Ordner ignoriert werden soll, als zweiten Parameter übergeben.

using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}

Liste der E-Mails

Die OlmFolder-Klasse, die einen Ordner darstellt, hat die folgenden Methoden, um eine Liste von E-Mails zu erhalten:

  • EnumerateMessages implementiert die Iteration von E-Mails in einem Ordner. In diesem Fall gibt jede Iteration ein OlmMessageInfo-Objekt zurück, das kurze Infos über die E-Mail bereitstellt.

  • EnumerateMapiMessages implementiert ebenfalls die Iteration von E-Mails in einem Ordner, aber in diesem Fall gibt jede Iteration ein MapiMessage-Objekt zurück, das die E-Mail selbst mit allen Eigenschaften darstellt.

Verwendung der Methode EnumerateMessages

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}

Verwendung der Methode EnumerateMapiMessages

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var msg in folder.EnumerateMapiMessages())
{
// save message in MSG format
msg.Save($"{msg.Subject}.msg");
}
}

Weitere nützliche Eigenschaften

Die OlmFolder-Klasse hat auch die Eigenschaften HasMessages und MessageCount, die die Anwesenheit von Nachrichten im Ordner und deren Anzahl zurückgeben:

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}

Extrahieren von E-Mails

Die OlmStorage-Klasse hat die Methode ExtractMapiMessage, die es ermöglicht, E-Mails zu extrahieren. Diese Methode erhält ein OlmMessageInfo-Objekt.

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
if (messageInfo.Date == DateTime.Today)
{
// Extracts today's messages form Inbox
var msg = olm.ExtractMapiMessage(messageInfo);
}
}
}

Fazit

In diesem Artikel haben Sie gelernt, wie man OLM-Dateien in C# liest. Sie haben die Möglichkeiten gesehen, wie Sie eine Liste von Ordnern erhalten und Nachrichten aus der OLM-Datei extrahieren können. Darüber hinaus können Sie mehr über Aspose.Email für .NET in der Dokumentation erfahren. Auch können Sie Ihre Fragen oder Anfragen in unserem Forum teilen.

Siehe auch