2014-09-01 3 views
0

У меня есть иерархия каталогов, полная файлов данных электронной почты EML/MSG. Эти файлы могут быть импортированы в MS Outlook 2010 (настольная версия) по одному, но я ищу способ автоматизировать это. Мне нужно создать каждую папку в качестве папки Outlook и импортировать файлы данных электронной почты в эти папки Outlook. Кто-нибудь знает о Outlook 2010 API, который позволяет создавать папки & импортировать файлы?Как импортировать файлы электронной почты MSG/EML в Outlook через API?

ответ

2

Чтобы создать новые папки в Outlook, используйте MAPIFolder.Folders.Add.

Модель объекта Outlook не поддерживает импорт файлов EML или MSG (или любых других файлов, если на то пошло).

Для MSG файлов вы можете

  1. Использование Extended MAPI (C++ или Delphi oinly) и функция OpenIMsgOnIStg открыть файл MSG. Затем вы можете создать новое сообщение в целевой папке и скопировать свойства либо с помощью IMesage.CopyTo (имейте в виду, что автономные файлы MSG неправильно обрабатывают именованные свойства в CopyTo) или читают свойства по одному и задают их на целевом сообщение явно.

  2. Модель объекта Outlook может открывать файлы MSG с использованием Application.CreateItemFromTemplate (он будет создан в состоянии unsent) и с использованием Namespace.OpenSharedItem. Вы можете переместить сообщение (MailItem.Move) в целевой папку

Для файлов EML, вы можете

  1. Использования Extended MAPI (C++ или только Delphi) и встроенный Интерфейс Outlook (IComverterSession). Вы можете играть с этим интерфейсом в OutlookSpy (нажмите кнопку IConverterSession).

  2. Модель объекта Outlook не поддерживает файлы EML. Лучшее, что вы можете сделать, это создать свой собственный парсер и скопировать EML-файл в один заголовок/часть MIME Outlook за раз.

При использовании 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

Полноценный ответ, спасибо! Я проверю ваши ресурсы и вернусь. –

Смежные вопросы