我有一个目录层次结构,里面充满了EML/MSG电子邮件数据文件。这些文件可以一次导入到MSOutlook2010(桌面版)中,但我正在寻找一种自动化的方法。我需要将每个文件夹创建为Outlook文件夹,并将电子邮件数据文件导入这些Outlook文件夹。任何知道Outlook 2010 API的人,它允许创建文件夹&导入文件?
若要在Outlook中创建新文件夹,请使用MAPIFolder.Folders.Add
。
Outlook对象模型不直接支持导入EML或MSG文件(或任何其他文件)。
对于MSG文件,您可以
-
使用Extended MAPI(仅限C++或Delphi)和OpenIMsgOnIStg函数打开MSG文件。然后,您可以在目标文件夹中创建一条新消息,并使用
IMessage.CopyTo
复制属性(请记住,独立的MSG文件无法正确处理CopyTo
中的命名属性),或者一次读取一个属性并在目标消息上显式设置它们。 -
Outlook对象模型可以使用
Application.CreateItemFromTemplate
(它将以未发送状态创建)和Namespace.OpenSharedItem
打开MSG文件。然后,您可以将消息(MailItem.Move
)移动到目标文件夹中
对于EML文件,您可以
-
使用Extended MAPI(仅限C++或Delphi)和内置Outlook接口(IComverterSession)。你可以在OutlookSpy中玩这个界面(点击IConverterSession按钮-我是它的作者)。
-
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