
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
函数,递归地从 OLM 中读取每个文件夹及其消息,使用 EnumerateMapiMessages 方法,并使用 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 的其他功能。如果您有任何问题,可以在 我们的论坛 上发帖。