
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
- Öffnen von OLM-Dateiformaten
- Abrufen von Ordnern
- Liste der E-Mails
- Extrahieren von E-Mails
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:
über den Konstruktor
über die statische FromFile-Methode
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.