将 OLM 转换为 PST
Contents
[
Hide
]
OLM 是一种由 Microsoft Outlook for Mac 使用的数据库文件格式。OLM 文件存储电子邮件、日历数据、联系人和应用设置,但在 Windows 版 Outlook 中不受支持。要将邮箱从 Mac 版 Outlook 迁移到 Windows 版 Outlook,需要将 OLM 文件转换为 Outlook PST 格式。Aspose.Email for .NET 让您可以在代码中完成此操作,无需安装 Microsoft Outlook。
转换工作原理
要将 OLM 文件转换为 PST,请按以下步骤操作:
- 创建该类的实例 OlmStorage 用于打开源 OLM 文件的类。
- 使用以下方式创建新的 PST 文件: PersonalStorage.Create 方法。
- 实现一个
GetContainerClass方法,将消息类映射到相应的文件夹(容器)类,从而在 PST 中以正确的类型创建每个文件夹。 - 实现一个
AddToPst方法递归读取 OLM 文件中的每个文件夹及其消息 - 使用 EnumerateMapiMessages - 并以相同的顺序将它们添加到 PST 中,使用AddSubFolder和AddMessage的方法 FolderInfo.
代码示例
以下代码展示了如何将 OLM 文件转换为 PST。
Main 方法:
// create an instance of OlmStorage class to open the source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
// recursively read each folder and its messages
// and add 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);
}
}
相反方向的转换(PST 到 OLM)不受支持,因为 OLM 文件只能在 Mac 版 Outlook 中创建,当添加账户并与邮件服务器同步时生成。