如何通过API将MSG/EML电子邮件文件导入到Outlook中?

如何通过API将MSG/EML电子邮件文件导入到Outlook中?

问题描述:

我有一个完整的EML/MSG电子邮件数据文件的目录层次结构。这些文件可以一次导入到MS Outlook 2010(桌面版本)中,但我正在寻找一种方法来自动执行此操作。我需要将每个文件夹创建为一个Outlook文件夹,并将电子邮件数据文件导入这些Outlook文件夹。任何人都知道Outlook 2010 API允许创建文件夹&导入文件?如何通过API将MSG/EML电子邮件文件导入到Outlook中?

要在Outlook中创建新文件夹,请使用MAPIFolder.Folders.Add。

Outlook对象模型不直接支持导入EML或MSG文件(或任何其他文件)。

味精的文件,您可以

  1. 使用扩展MAPI(C++或Delphi oinly)和OpenIMsgOnIStg函数打开一个文件味精。然后,您可以在目标文件夹中创建新消息,并使用IMesage.CopyTo复制属性(请记住,独立MSG文件不能正确处理CopyTo中的命名属性),或者一次读取一个属性,并将它们设置为目标消息明确。

  2. Outlook对象模型可以使用Application.CreateItemFromTemplate(它将以未发送状态创建)并使用Namespace.OpenSharedItem打开MSG文件。然后,可以将消息(MailItem.Move)移动到目标文件夹

对于EML文件,您可以

  1. 使用扩展MAPI(C++或仅德尔福)和内置Outlook界面(IComverterSession)。您可以在OutlookSpy(点击IConverterSession按钮)中使用该界面进行游戏。

  2. Outlook对象模型根本不支持EML文件。你可以做的最好的是创建你自己的解析器,并且一次将EML文件复制到Outlook中一个MIME头/部分。

如果使用Redemption是一个选项,你可以使用RDOMail .IMPORT方法 - 它进口MSG(olMsg)和EML(olRfc822)文件(以及一些其他格式)。

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT '//or you can call Logon 
    set Inbox = Session.GetDefaultFolder(olFolderInbox) 
    set Msg = Inbox.Items.Add 
    Msg.Sent = true '//since Import does not copy this property 
    Msg.Import("c:\temp\test.eml", 1024) ' //1024 is olRfc822 
    Msg.Save 
+0

神奇深入的答案,非常感谢!我会检查你的资源,然后回去.. – 2014-09-01 17:58:07