Läs MS Outlook OLM-filer i C# .NET

OLM är ett filformat som Microsoft Outlook för Mac använder för att lagra lokal data. OLM innehåller lokal data som e-postmeddelanden, bilagor, anteckningar, kalenderdata, kontakter, uppgifter, historik etc. OLM-filer används av Outlook för Mac. Outlook för Windows kan inte få åtkomst eller öppna det. Versionen av Outlook för Windows stöder endast PST-filformat för att lagra data. I den här artikeln kommer vi att överväga hur man öppnar och läser filer i OLM-format från C#-applikationer.

C# .NET API för att läsa OLM-filer

Aspose.Email for .NET är ett robust API som tillhandahåller en rad funktioner för att implementera e-postapplikationer. Det tillåter också att läsa OLM-filer och andra e-postlagringsformat som MBOX, PST/OST. Du kan antingen installera biblioteket via NuGet eller ladda ner dess DLL.

PM> Install-Package Aspose.Email

Öppna filer i OLM-format

Aspose.Email API introducerar två sätt att öppna filer i OLM-format:

Det finns skillnader i beteende mellan dessa metoder. Se avsnitt nedan.

Öppnar fil av konstruktör

För att öppna en fil bör du anropa konstruktor av klassen OlmStorage och skicka fullständigt filnamn eller ström som argument till den:

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

Öppna fil med statisk metod FromFile

För att öppna filen bör du använda den statiska metoden FromFile och skicka fullständigt filnamn eller ström som argument till den:

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

Hämta mappar

Efter att ha öppnat filen med konstruktorn kommer den att vara tillgänglig FolderHierarchy-egenskapen. Den returnerar en lista över kataloger som finns i OLM-filen. Varje objekt i klassen OlmFolder i listan har egenskapen SubFolders, som returnerar en lista med undermappar. Därmed har vi tillgång till alla kataloger i OLM.

Exemplet nedan visar en lista över alla mappar i hierarkisk ordning:

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

Om du öppnar filen med metoden FromFile kommer egenskapen FolderHierarchy som standard inte att initieras och returnerar “null”. I det här fallet är det nödvändigt att uttryckligen anropa metoden GetFolders:

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

Det är också möjligt att få vilken mapp som helst efter namn. För att göra detta bör du:

  • anropa metoden GetFolder

  • att skicka mappnamn som ett första argument och värde, som visar om man ska ignorera skiftlägeskänslighet när man söker efter en mapp, som den andra parametern.

using (var olm = OlmStorage.FromFile(fileName))
{
    // hämta inkorgen efter namn
    OlmFolder folder = olm.GetFolder("Inbox", true);
}

Lista över e-postmeddelanden

Klassen OlmFolder, som representerar mappen, har följande metoder för att få lista över e-postmeddelanden:

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

Använder metoden EnumerateMessages

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

Använder EnumerateMapiMessages-metoden

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

    foreach (var msg in folder.EnumerateMapiMessages())
    {
        // spara meddelande i MSG-format
        msg.Save($"{msg.Subject}.msg");
    }
}

Andra användbara egenskaper

Klassen OlmFolder har dessutom egenskaperna HasMessages och MessageCount, som returnerar närvaron av meddelanden i mappen och deras antal:

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

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

Extraherar e-postmeddelanden

Klassen OlmStorage har metoden ExtractMapiMessage som gör det möjligt att extrahera emal. Denna metod tar emot ett 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)
        {
            // Extraherar dagens meddelanden från Inkorg
            var msg = olm.ExtractMapiMessage(messageInfo);
        }
    }
}

Slutsats

I den här artikeln lärde du dig hur du läser OLM-filer i C#. Du har sett sätten att få en lista över mappar och extrahera meddelanden från OLM-filen. Utöver detta kan du lära dig mer om Aspose.Email for .NET med hjälp av dokumentation. Du kan också dela dina frågor eller förfrågningar i vårt forum.

Se även