使用EntryID,StoreID和/或PR_ENTRYID打开Outlook邮件项

时间:2011-09-15 22:34:11

标签: vba outlook exchange-server mapi mailitem

注意:我正在使用VBA和Office 2007.(我会使用C#,但项目参数不允许这样做)

我试图在Outlook或API中找到一些方法,允许我通过从Access数据库提供Outlook EntryID或MAPI“PR_ENTRYID”属性来打开Outlook邮件项。我找到了许多对所述代码的引用,但我从未见过有人真正发布过一个解决方案。我试图包括对mapi32.dll和OLMAPI32.dll的引用,但是我收到以下错误:“无法添加对指定文件的引用。”我猜这是因为那些dll用于.NET。

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:21)

使用Namespace.GetItemFromID。请注意,第二个参数(商店ID)是可选的。如果Outlook已触及有问题的商店在当前会话中,则可以省略它。如果没有,Outlook将引发“未知条目ID”异常。如果指定了商店条目ID,Outlook将首先打开它,商店提供商将有机会使用MAPI系统注册其条目ID。

set App = CreateObject("Outlook.Application")
set NS = App.GetNamespace("MAPI")
NS.Logon
set Msg = NS.GetItemFromID(EntryID)
MsgBox Msg.Subject

答案 1 :(得分:3)

对于C#:

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

OutlookApp具有Microsoft.Office.Interop.Outlook._Application类型。