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

时间:2014-09-01 09:01:48

标签: api email outlook

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

1 个答案:

答案 0 :(得分:2)

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

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

对于MSG文件,您可以

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

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

  3. 对于EML文件,您可以

    1. 使用扩展MAPI(仅限C ++或Delphi)和内置Outlook界面(IComverterSession)。您可以在OutlookSpy中使用该界面(单击IConverterSession按钮)。

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

    3. 如果使用Redemption是一个选项,则可以使用RDOMail。导入方法 - 导入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