Read MS Outlook OLM Files in C# .NET

OLM یک فرمت فایل است که Microsoft Outlook برای Mac از آن برای ذخیره داده‌های محلی استفاده می‌کند. OLM شامل داده‌های محلی مانند ایمیل‌ها، پیوست‌ها، یادداشت‌ها، داده‌های تقویم، مخاطبین، وظایف، تاریخچه و غیره است. فایل‌های OLM توسط Outlook برای Mac استفاده می‌شوند. Outlook برای ویندوز نمی‌تواند به آن دسترسی پیدا کند یا آن را باز کند. نسخه Outlook برای ویندوز فقط از فرمت فایل PST برای ذخیره داده‌ها پشتیبانی می‌کند. در این مقاله ما به بررسی چگونه فایل‌های فرمت OLM را از برنامه‌های C# باز و بخوانیم خواهیم پرداخت.

C# .NET API to Read OLM Files

Aspose.Email for .NET یک API قدرتمند است که مجموعه‌ای از ویژگی‌ها را برای پیاده‌سازی برنامه‌های ایمیل ارائه می‌دهد. همچنین، این API امکان خواندن فایل‌های OLM و دیگر فرمت‌های ذخیره‌سازی ایمیل مانند MBOX و PST/OST را نیز فراهم می‌کند. شما می‌توانید کتابخانه را از طریق NuGet نصب کنید یا DLL آن را دانلود کنید.

PM> Install-Package Aspose.Email

Opening OLM format files

Aspose.Email API دو روش برای باز کردن فایل‌های فرمت OLM معرفی می‌کند:

در این روش‌ها تفاوت‌هایی در رفتار وجود دارد. به بخش زیر مراجعه کنید.

Opening file by constructor

برای باز کردن یک فایل، شما باید constructor کلاس OlmStorage را فراخوانی کنید و نام کامل فایل یا استریم را به عنوان آرگومان به آن پاس دهید:

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

Opening file using static method FromFile

برای باز کردن فایل باید از روش استاتیک FromFile استفاده کنید و نام کامل فایل یا استریم را به عنوان آرگومان به آن پاس دهید:

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

Getting folders

بعد از باز کردن فایل با استفاده از constructor، ویژگی 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);
}

List of emails

کلاس OlmFolder که نمایانگر پوشه است، روش‌های زیر را برای دریافت لیست ایمیل‌ها دارد:

  • EnumerateMessages پیاده‌سازی تکرار ایمیل‌ها در یک پوشه را انجام می‌دهد. در این حالت، هر تکرار یک شی OlmMessageInfo را باز می‌گرداند که اطلاعات مختصری درباره ایمیل فراهم می‌کند.

  • EnumerateMapiMessages نیز پیاده‌سازی تکرار ایمیل‌ها در یک پوشه را انجام می‌دهد، اما در این حالت، هر تکرار یک شی MapiMessage را باز می‌گرداند که نمایانگر خود ایمیل با تمام ویژگی‌ها می‌باشد.

Using EnumerateMessages method

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

Using EnumerateMapiMessages method

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

Other useful properties

همچنین، کلاس OlmFolder دارای ویژگی‌های HasMessages و MessageCount است که وجود پیام‌ها در پوشه و تعداد آنها را باز می‌گرداند:

using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}

Extracting emails

کلاس 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);
}
}
}

Conclusion

در این مقاله، شما یاد گرفتید که چگونه فایل‌های OLM را در C# بخوانید. شما راه‌های بدست آوردن لیست پوشه‌ها و استخراج پیام‌ها از فایل OLM را مشاهده کردید. علاوه بر این، می‌توانید اطلاعات بیشتری درباره Aspose.Email for .NET با استفاده از مستندات کسب کنید. همچنین، می‌توانید سوالات یا درخواست‌های خود را در فروم ما به اشتراک بگذارید.

See Also