【问题标题】:Open Outlook mail Item using EntryID, StoreID, and / or PR_ENTRYID使用 EntryID、StoreID 和/或 PR_ENTRYID 打开 Outlook 邮件项目
【发布时间】:2011-11-18 06:55:25
【问题描述】:
注意:我使用的是 VBA 和 Office 2007。(我会使用 C#,但项目参数不允许这样做)
我试图在 Outlook 或 API 中找到一些方法,通过提供 Access 数据库中的 Outlook EntryID 或 MAPI“PR_ENTRYID”属性,我可以打开 Outlook 邮件项目。我找到了很多对上述代码的引用,但我从未见过有人真正发布解决方案。我尝试包含对 mapi32.dll 和 OLMAPI32.dll 的引用,但出现以下错误:“无法添加对指定文件的引用。”我猜这是因为这些 dll 是为 .NET 设计的。
您能提供的任何帮助将不胜感激。
【问题讨论】:
标签:
vba
outlook
exchange-server
mapi
mailitem
【解决方案1】:
使用Namespace.GetItemFromID。注意第二个参数(store id)是可选的。如果当前会话中 Outlook 已触及相关存储,则可以省略它。如果不是,Outlook 将引发“未知条目 id”异常。如果指定了商店入口 id,Outlook 将首先打开它,商店提供者将有机会将其入口 id 注册到 MAPI 系统。
set App = CreateObject("Outlook.Application")
set NS = App.GetNamespace("MAPI")
NS.Logon
set Msg = NS.GetItemFromID(EntryID)
MsgBox Msg.Subject
【解决方案2】:
对于 C#:
var ns = OutlookApp.GetNamespace("MAPI");
var item = ns.GetItemFromID(entryId) as MailItem;
其中 OutlookApp 具有 Microsoft.Office.Interop.Outlook._Application 类型。