Читайте файли MS Outlook OLM у C# .NET

OLM – це формат файлу, який Microsoft Outlook для Mac використовує для зберігання локальних даних. OLM містить локальні дані, такі як електронні листи, вкладення, нотатки, дані календаря, контакти, завдання, журнал тощо. Файли OLM використовуються Outlook для Mac. Outlook для Windows не може отримати доступ або відкрити його. Версія Outlook для Windows підтримує лише формат файлу PST для зберігання даних. У цій статті ми розглянемо, як відкривати та читати файли формату OLM із програм C#.

C# .NET API для читання файлів OLM

Aspose.Email for .NET — це надійний API, який надає низку функцій для реалізації програм електронної пошти. Крім того, він дозволяє читати файли OLM та інші формати зберігання пошти, такі як MBOX, PST/OST. Ви можете встановити бібліотеку через NuGet або завантажити її DLL.

PM> Install-Package Aspose.Email

Відкриття файлів формату OLM

Aspose.Email API представляє два способи відкриття файлів формату OLM:

Існують відмінності в поведінці цих методів. Дивіться розділ нижче.

Відкриття файлу конструктором

Щоб відкрити файл, вам слід викликати constructor класу 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))
{
    // отримати папку "Вхідні" за назвою
    OlmFolder folder = olm.GetFolder("Inbox", true);
}

Список електронних листів

Клас OlmFolder, який представляє папку, має такі методи отримання списку електронних листів:

  • EnumerateMessages implements iteration of emails in a folder. In this case, every iteration returns OlmMessageInfo object, which provides short info about email.

  • EnumerateMapiMessages, also implements iteration of emails in a folder, but in this case, every iteration returns MapiMessage object, which represents the email itself, with all properties.

Використання методу 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())
    {
        // зберегти повідомлення у форматі MSG
        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, який дозволяє видобувати emal. Цей метод отримує об’єкт OlmMessageInfo.

using (var olm = OlmStorage.FromFile(fileName))
{
    var folder = olm.GetFolder("Inbox", true);

    foreach (var messageInfo in folder.EnumerateMessages())
    {
        if (messageInfo.Date == DateTime.Today)
        {
            // Витягує сьогоднішні повідомлення з папки "Вхідні".
            var msg = olm.ExtractMapiMessage(messageInfo);
        }
    }
}

Висновок

У цій статті ви дізналися, як читати файли OLM у C#. Ви бачили способи отримати список папок і витягти повідомлення з файлу OLM. Окрім цього, ви можете дізнатися більше про Aspose.Email for .NET за допомогою документації. Крім того, ви можете поділитися своїми запитаннями чи запитами на нашому форумі.

Дивись також