具有 PS_INTERNET_HEADERS 字段的 Outlook 窗体区域

Outlook form region with PS_INTERNET_HEADERS field

我正在创建 Microsoft Outlook add-in(Visual Studio 2012、C#、COM add-in、无 VSTO、Outlook 2010/2013/2016),其中 1) 用户必须是能够撰写和阅读必须映射的各种字段 to/from MIME headers 当消息 leave/enter Microsoft Exchange 时,以及 2) 这些字段必须可用作要使用的本机 Outlook 字段,例如作为 Outlook 视图、搜索表达式等中的列

获取1),add-in读写PS_INTERNET_HEADERS命名空间中的(MAPI)字段。首次加载 add-in 时,它会创建一条虚拟隐藏消息,确保 Exchange 被迫在传入消息的 MIME headers 和 MAPI 属性之间进行映射(解决 [=12= 中描述的问题) ]).效果不错。

为了获得 2),我创建了一个 old-fashioned Outlook 表单配置文件 (Creating a Form Configuration File),其中的条目如下:

[Property.MMHSFoo]
Type=31
NmidPropset={00020386-0000-0000-C000-000000000046}
NmidString=MMHS-Foo
DisplayName=Foo

然后我使用 Outlook Redemption 在 add-in 加载时注册表单。现在用户可以将字段 Foo 用作其他 Outlook 字段。

现在,我的问题是当我使用 Outlook 窗体设计器创建窗体区域时,如果我尝试添加字段 Foo,我会收到一条错误消息“操作失败”。如果我将 NmidPropset 值从 PS_INTERNET_HEADERS (00020386-0000-0000-C000-000000000046) 更改为 PS_PUBLIC_STRINGS (00020329-0000-0000-C000-000000000046),我可以添加字段 Foo,然后添加 1 ) 不起作用。

因此我的问题是:如何将命名空间 PS_INTERNET_HEADERS 中的字段添加到 Outlook 表单区域,以便同时满足要求 1) 和 2)?

首先,对于 (1),您不需要创建任何消息 - 只需对任何存储对象(IMsgStore、IMAPIFolder、IMessage 等)调用 GetIDsFromNames(...MAPI_CREATE)。

对于 (2),我认为该表格只能用于 PS_PUBLIC_STRINGS。为什么不创建一个任务窗格并在您的代码中显式填充其内容?