Откройте почтовый элемент Outlook, используя EntryID, StoreID и / или PR_ENTRYID - PullRequest
8 голосов
/ 16 сентября 2011

ПРИМЕЧАНИЕ. Я использую VBA и Office 2007. (Я бы использовал C #, но параметры проекта не позволяют этого)

Я пытаюсь найти какой-либо метод в Outlook или API, это позволит мне открыть почтовый элемент Outlook, предоставив либо Outlook EntryID, либо свойство MAPI "PR_ENTRYID" из базы данных Access.Я нашел много ссылок на упомянутый код, но я никогда не видел, чтобы кто-то действительно выкладывал решение.Я попытался включить ссылки на mapi32.dll и OLMAPI32.dll, но я получаю следующую ошибку: «Не удается добавить ссылку на указанный файл».Я предполагаю, что это потому, что эти DLL предназначены для .NET.

Любая помощь, которую вы можете дать, будет принята с благодарностью.

Ответы [ 2 ]

21 голосов
/ 16 сентября 2011

Используйте Namespace.GetItemFromID.Обратите внимание, что второй параметр (идентификатор магазина) является необязательным.Вы можете опустить его, если рассматриваемый магазин уже был затронут Outlook в текущем сеансе.Если нет, Outlook вызовет исключение «неизвестный идентификатор записи».Если указан идентификатор записи магазина, Outlook сначала откроет его, и поставщик магазина сможет зарегистрировать свои идентификаторы входа в системе MAPI.

set App = CreateObject("Outlook.Application")
set NS = App.GetNamespace("MAPI")
NS.Logon
set Msg = NS.GetItemFromID(EntryID)
MsgBox Msg.Subject
3 голосов
/ 13 марта 2013

Для C #:

var ns = OutlookApp.GetNamespace("MAPI");
var item = ns.GetItemFromID(entryId) as MailItem;

Где OutlookApp имеет тип Microsoft.Office.Interop.Outlook._Application.

...