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



我有一个目录层次结构,里面充满了EML/MSG电子邮件数据文件。这些文件可以一次导入到MSOutlook2010(桌面版)中,但我正在寻找一种自动化的方法。我需要将每个文件夹创建为Outlook文件夹,并将电子邮件数据文件导入这些Outlook文件夹。任何知道Outlook 2010 API的人,它允许创建文件夹&导入文件?

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

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

对于MSG文件,您可以

  1. 使用Extended MAPI(仅限C++或Delphi)和OpenIMsgOnIStg函数打开MSG文件。然后,您可以在目标文件夹中创建一条新消息,并使用IMessage.CopyTo复制属性(请记住,独立的MSG文件无法正确处理CopyTo中的命名属性),或者一次读取一个属性并在目标消息上显式设置它们。

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

对于EML文件,您可以

  1. 使用Extended MAPI(仅限C++或Delphi)和内置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:temptest.eml", 1024) ' //1024 is olRfc822
  Msg.Save

最新更新