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

Posted

技术标签:

【中文标题】使用 EntryID、StoreID 和/或 PR_ENTRYID 打开 Outlook 邮件项目【英文标题】:Open Outlook mail Item using EntryID, StoreID, and / or PR_ENTRYID 【发布时间】: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 设计的。

您能提供的任何帮助将不胜感激。

【问题讨论】:

【参考方案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 类型。

【讨论】:

以上是关于使用 EntryID、StoreID 和/或 PR_ENTRYID 打开 Outlook 邮件项目的主要内容,如果未能解决你的问题,请参考以下文章

移动对象后获取 EntryID

Outlook.MailItem.EntryID 和 Mapi32.dll MessageID 之间的区别

查找StoreID中出现次数最多的pairs并且每个STOREID都只有这个pair SQL

在 Ext.data.Store 上使用 storeId 不会生成唯一实例

如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值

如何解析具有子内容但没有子标签的完整 xml div