
OLM 是 Microsoft Outlook for Mac 用於儲存本地數據的檔案格式。OLM 包含本地數據,例如電子郵件、附件、筆記、日曆數據、聯絡人、任務、歷史記錄等。OLM 檔案由 Outlook for Mac 使用。Windows 版本的 Outlook 無法訪問或打開它。Windows 版本的 Outlook 僅支持 PST 檔案格式來儲存數據。在這篇文章中,我們將考慮 如何從 C# 應用程序打開和讀取 OLM 格式檔案。
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)) | |
{ | |
// get inbox folder by name | |
OlmFolder folder = olm.GetFolder("Inbox", true); | |
} |
電子郵件列表
OlmFolder 類(表示資料夾)具有以下方法來獲取電子郵件列表:
EnumerateMessages 實現對資料夾中電子郵件的迭代。在這種情況下,每次迭代返回 OlmMessageInfo 對象,該對象提供有關電子郵件的簡要信息。
EnumerateMapiMessages 也實現對資料夾中電子郵件的迭代,但在這種情況下,每次迭代返回 MapiMessage 對象,該對象代表電子郵件本身,包含所有屬性。
使用 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()) | |
{ | |
// save message in MSG format | |
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 方法,該方法允許提取電子郵件。此方法接收一個 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); | |
} | |
} | |
} |
結論
在這篇文章中,您學會了如何在 C# 中讀取 OLM 檔案。您已經看到獲取資料夾列表和從 OLM 檔案提取郵件的方法。此外,您可以通過 Aspose.Email for .NET 獲得更多信息,使用 文檔。同時,您可以在我們的 論壇 上分享您的問題或請求。