קרא את קבצי 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:

ישנם הבדלים בהתנהגות בין השיטות הללו. ראה סעיף להלן.

פתיחת קובץ על ידי בנאי

כדי לפתוח קובץ, עליך להתקשר לקונסטרוקטור של המחלקה 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)
        {
            // מחלץ את ההודעות של היום מ-Inbox
            var msg = olm.ExtractMapiMessage(messageInfo);
        }
    }
}

סיכום

במאמר זה, למדת כיצד לקרוא קבצי OLM ב-C#. ראית את הדרכים לקבל רשימה של תיקיות ולחלץ הודעות מקובץ OLM. חוץ מזה, אתה יכול ללמוד עוד על Aspose.Email for .NET באמצעות תיעוד. כמו כן, תוכל לשתף את השאלות או הבקשות שלך בפורום שלנו.

ראה גם