Čtěte soubory MS Outlook OLM v C# .NET

OLM je formát souboru, který Microsoft Outlook pro Mac používá k ukládání místních dat. OLM obsahuje místní data, jako jsou e-maily, přílohy, poznámky, data kalendáře, kontakty, úkoly, historie atd. Soubory OLM používá Outlook pro Mac. Outlook pro Windows nemůže získat přístup nebo jej otevřít. Verze Outlooku pro Windows podporuje k ukládání dat pouze formát souboru PST. V tomto článku se podíváme na to, jak otevřít a číst soubory formátu OLM z aplikací C#.

C# .NET API pro čtení souborů OLM

Aspose.Email for .NET je robustní API, které poskytuje řadu funkcí pro implementaci e-mailových aplikací. Umožňuje také čtení souborů OLM a dalších formátů ukládání pošty, jako je MBOX, PST/OST. Knihovnu můžete nainstalovat buď pomocí NuGet nebo stáhnout její DLL.

PM> Install-Package Aspose.Email

Otevírání souborů ve formátu OLM

Aspose.Email API představuje dva způsoby otevírání souborů formátu OLM:

Mezi těmito metodami jsou rozdíly v chování. Viz část níže.

Otevření souboru konstruktorem

Chcete-li otevřít soubor, měli byste zavolat constructor třídy OlmStorage a předat mu celý název souboru nebo stream jako argument:

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

Otevření souboru pomocí statické metody FromFile

Chcete-li otevřít soubor, měli byste použít statickou metodu FromFile a předat mu celý název souboru nebo stream jako argument:

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

Získávání složek

Po otevření souboru pomocí konstruktoru bude přístupná vlastnost FolderHierarchy. Vrátí seznam adresářů, které existují v souboru OLM. Každý objekt třídy OlmFolder seznamu má vlastnost SubFolders, která vrací seznam podsložek. Máme tedy přístup ke všem adresářům v OLM.

Níže uvedený příklad zobrazuje seznam všech složek v hierarchickém pořadí:

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+"-");
    }
}

Pokud soubor otevřete pomocí metody FromFile, ve výchozím nastavení nebude vlastnost FolderHierarchy inicializována a vrátí null. V tomto případě je nutné explicitně zavolat metodu GetFolders:

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

Také je možné získat jakoukoli složku podle názvu. Chcete-li to provést, měli byste:

  • zavolejte metodu GetFolder

  • předat název složky jako první argument a hodnotu, která ukazuje, zda se má při hledání složky ignorovat rozlišování malých a velkých písmen, jako druhý parametr.

using (var olm = OlmStorage.FromFile(fileName))
{
    // získat složku doručené pošty podle názvu
    OlmFolder folder = olm.GetFolder("Inbox", true);
}

Seznam e-mailů

Třída OlmFolder, která představuje složku, má následující způsoby, jak získat seznam e-mailů:

  • 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.

Použití metody EnumerateMessages

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

Pomocí metody EnumerateMapiMessages

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

    foreach (var msg in folder.EnumerateMapiMessages())
    {
        // uložit zprávu ve formátu MSG
        msg.Save($"{msg.Subject}.msg");
    }
}

Další užitečné vlastnosti

Třída OlmFolder má také vlastnosti HasMessages a MessageCount, které vrací přítomnost zpráv ve složce a jejich počet:

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

    if (folder.HasMessages)
    {
        Console.WriteLine($"Message count: {folder.MessageCount}");
    }
}

Extrahování e-mailů

Třída OlmStorage má metodu ExtractMapiMessage, která umožňuje extrahovat emal. Tato metoda přijímá objekt OlmMessageInfo.

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

    foreach (var messageInfo in folder.EnumerateMessages())
    {
        if (messageInfo.Date == DateTime.Today)
        {
            // Extrahuje dnešní zprávy z doručené pošty
            var msg = olm.ExtractMapiMessage(messageInfo);
        }
    }
}

Závěr

V tomto článku jste se naučili číst soubory OLM v C#. Viděli jste způsoby, jak získat seznam složek a extrahovat zprávy ze souboru OLM. Kromě toho se můžete dozvědět více o Aspose.Email pro .NET pomocí documentation. Také můžete sdílet své dotazy nebo požadavky na našem fóru.

Viz také