
Microsoft Outlook 可用於 Windows 和 Mac 操作系統。 Outlook for Mac 和 Outlook for Windows,將用戶電子郵件存儲在數據文件中。這些數據文件包含所有電子郵件、聯繫人、任務、備忘錄和日曆項目。 Outlook for Mac 將郵箱項目保存在 OLM 文件中,而這在 Outlook for Windows 中不受支持。因此,無法在 Outlook for Windows 中打開 Outlook for Mac (OLM) 文件。如果您想將郵箱從 Outlook for Mac 遷移到 Outlook for Windows,您必須將 Outlook for Mac 的 OLM 文件轉換為 Outlook PST 文件格式。 本文涵蓋了如何以程式方式在 C# 中將 OLM 文件轉換為 PST 文件。
以下主題將在本文中涵蓋:
C# API 將 OLM 轉換為 PST
要將 OLM 轉換為 PST,我們將使用 Aspose.Email for .NET。這是一個電子郵件處理 API,允許您操作電子郵件並處理流行電子郵件客戶端(如 Thunderbird、Outlook 等)的文件格式。您可以使用以下命令 下載 API 的 DLL 或從 NuGet 安裝它。
PM> Install-Package Aspose.Email
將 OLM 轉換為 PST 的步驟
我們可以通過以下步驟將 OLM 文件轉換為 PST:
- 創建一個新的 PST 文件並打開它以進行寫入
- 打開源 OLM 文件
- 從 OLM 中讀取每個郵箱項目並將其寫入 PST
以下部分將描述如何將這些步驟轉換為 C# 並將文件從 OLM 轉換為 PST。
以 C# 程式方式將 OLM 轉換為 PST
我們可以通過以下步驟以程式方式在 C# 中將 OLM 轉換為 PST:
- 首先,創建 OlmStorage 類的實例以打開源 OLM。
- 接下來,使用 Create 方法創建一個新的 PST 文件。
- 此外,我們將創建一個
GetContainerClass
函數,該函數將消息類映射到文件夾類,以便我們可以創建與其包含的消息類相對應的容器類 PST 文件夾。 - 最後,創建一個
AddToPst
函數,該函數使用 EnumerateMapiMessages 方法遞歸讀取 OLM 中的每個文件夾及其消息,並使用 AddSubFolder 和 AddMessage 方法以相同的順序將它們添加到 PST 中。
以下代碼示例顯示了如何在 C# 中將 OLM 轉換為 PST。
主方法:
// create an instance of OlmStorage class to open source OLM | |
using (var olm = new OlmStorage("my.olm")) | |
// create a new PST file | |
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode)) | |
{ | |
// recursively reads each folder and its messages | |
// and adds them to the PST in the same order | |
foreach (var olmFolder in olm.FolderHierarchy) | |
{ | |
AddToPst(pst.RootFolder, olmFolder); | |
} | |
} |
GetContainerClass 函數:
public string GetContainerClass(string messageClass) | |
{ | |
if (messageClass.StartsWith("IPM.Contact") || messageClass.StartsWith("IPM.DistList")) | |
{ | |
return "IPF.Contact"; | |
} | |
if (messageClass.StartsWith("IPM.StickyNote")) | |
{ | |
return "IPF.StickyNote"; | |
} | |
if (messageClass.StartsWith("IPM.Activity")) | |
{ | |
return "IPF.Journal"; | |
} | |
if (messageClass.StartsWith("IPM.Task")) | |
{ | |
return "IPF.Task"; | |
} | |
if (messageClass.StartsWith("IPM.Appointment") || messageClass.StartsWith("IPM.Schedule.meeting")) | |
{ | |
return "IPF.Appointment"; | |
} | |
return "IPF.Note"; | |
} |
AddToPst 函數:
public void AddToPst(FolderInfo pstFolder, OlmFolder olmFolder) | |
{ | |
FolderInfo pstSubFolder = pstFolder.GetSubFolder(olmFolder.Name); | |
foreach (var msg in olmFolder.EnumerateMapiMessages()) | |
{ | |
if (pstSubFolder == null) | |
{ | |
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name, GetContainerClass(msg.MessageClass)); | |
} | |
pstSubFolder.AddMessage(msg); | |
} | |
if (pstSubFolder == null) | |
{ | |
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name); | |
} | |
foreach (var olmSubFolder in olmFolder.SubFolders) | |
{ | |
AddToPst(pstSubFolder, olmSubFolder); | |
} | |
} |
獲取免費 API 許可證
您可以使用 Aspose.Email for .NET 而不受評估限制,使用 免費臨時許可證。
結論
在這篇文章中,您已經學會了如何在 C# .NET 中將 OLM 轉換為 PST。此外,您還看到如何從 OLM 存儲中讀取消息並以程式方式將項目寫入 PST 存儲。除此之外,您可以訪問 文檔 探索 Aspose.Email for .NET 的其他功能。如果您有任何問題,可以發帖到 我們的論壇。