
OLM — это формат файла, который Microsoft Outlook для Mac использует для хранения локальных данных. OLM содержит локальные данные, такие как электронные письма, вложения, заметки, данные календаря, контакты, задачи, историю и т. д. Файлы OLM используются Outlook для Mac. Outlook для Windows не может получить доступ к ним или открыть их. Версия Outlook для Windows поддерживает только формат файла PST для хранения данных. В этой статье мы рассмотрим как открыть и прочитать файлы формата OLM из приложений C#.
- C# .NET API для чтения файлов OLM
- Открытие файлов формата OLM
- Получение папок
- Список электронных писем
- Извлечение электронных писем
C# .NET API для чтения файлов OLM
Aspose.Email для .NET — это мощный API, который предоставляет множество функций для реализации приложений электронной почты. Кроме того, он позволяет читать файлы OLM и другие форматы хранения почты, такие как MBOX, PST/OST. Вы можете установить библиотеку через NuGet или скачать ее DLL.
PM> Install-Package Aspose.Email
Открытие файлов формата OLM
Aspose.Email API предоставляет два способа открытия файлов формата OLM:
с помощью конструктора
с использованием статического метода FromFile
Существует различие в поведении между этими методами. См. раздел ниже.
Открытие файла с помощью конструктора
Чтобы открыть файл, вы должны вызвать конструктор класса OlmStorage и передать полное имя файла или поток в качестве аргумента:
var fileName = "MyStorage.olm"; | |
var olm = new OlmStorage(fileName); |
Открытие файла с использованием статического метода FromFile
Чтобы открыть файл, вы должны использовать статический метод FromFile и передать полное имя файла или поток в качестве аргумента:
var fileName = "MyStorage.olm"; | |
var olm = OlmStorage.FromFile(fileName); |
Получение папок
После открытия файла с помощью конструктора, будет доступно свойство FolderHierarchy. Оно возвращает список каталогов, которые существуют в файле OLM. Каждый объект класса OlmFolder из списка имеет свойство SubFolders, которое возвращает список подпапок. Таким образом, у нас есть доступ ко всем каталогам в OLM.
Пример ниже отображает список всех папок в иерархическом порядке:
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+"-"); | |
} | |
} |
Если открыть файл с помощью метода FromFile, то по умолчанию свойство FolderHierarchy не будет инициализировано и вернет null
. В этом случае необходимо явно вызвать метод GetFolders:
using (var olm = OlmStorage.FromFile(fileName)) | |
{ | |
var folders = olm.GetFolders(); | |
} |
Также можно получить любую папку по имени. Для этого вы должны:
вызвать метод GetFolder
передать имя папки в качестве первого аргумента и значение, указывающее, следует ли игнорировать регистронезависимость при поиске папки, в качестве второго параметра.
using (var olm = OlmStorage.FromFile(fileName)) | |
{ | |
// get inbox folder by name | |
OlmFolder folder = olm.GetFolder("Inbox", true); | |
} |
Список электронных писем
Класс OlmFolder, который представляет папку, имеет следующие методы для получения списка электронных писем:
EnumerateMessages реализует итерацию по электронным письмам в папке. В этом случае каждая итерация возвращает объект OlmMessageInfo, который предоставляет краткую информацию о письме.
EnumerateMapiMessages также реализует итерацию по электронным письмам в папке, но в этом случае каждая итерация возвращает объект MapiMessage, который представляет само письмо со всеми свойствами.
Использование метода EnumerateMessages
using (var olm = OlmStorage.FromFile(fileName)) | |
{ | |
var folder = olm.GetFolder("Inbox", true); | |
foreach (var messageInfo in folder.EnumerateMessages()) | |
{ | |
Console.WriteLine(messageInfo.Subject); | |
} | |
} |
Использование метода 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"); | |
} | |
} |
Другие полезные свойства
Также класс OlmFolder имеет свойства HasMessages и MessageCount, которые возвращают наличие сообщений в папке и их количество:
using (var olm = OlmStorage.FromFile(fileName)) | |
{ | |
var folder = olm.GetFolder("Inbox", true); | |
if (folder.HasMessages) | |
{ | |
Console.WriteLine($"Message count: {folder.MessageCount}"); | |
} | |
} |
Извлечение электронных писем
Класс OlmStorage имеет метод ExtractMapiMessage, который позволяет извлекать электронные письма. Этот метод принимает объект OlmMessageInfo.
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); | |
} | |
} | |
} |
Заключение
В этой статье вы узнали, как читать файлы OLM в C#. Вы увидели способы получения списка папок и извлечения сообщений из файла OLM. Кроме того, вы можете узнать больше о Aspose.Email для .NET, воспользовавшись документацией. Также вы можете задать свои вопросы или запросы на нашем форуме.