2

我正在尝试为 Outlook(确切地说,是 2010 年)在 .NET/C# 中开发一个插件——或者更确切地说,现在只是一个概念验证,看看我的想法是否真的可行——我面临以下问题:

插件应该提供一个新的自定义文件夹(在层次结构的顶层,即在所有其他主要项目旁边,如任务、日历、联系人等),在其中向用户提供项目。所以我认为在 AddIn 的 Startup 方法中,我可以简单地执行类似的操作

Outlook.Folder parent = inBox.Parent as Outlook.Folder;
Outlook.Folder myCustomFolder = (Outlook.Folder)parent.Folders.Add("My Custom Folder");

...这确实有效。但是,退出 Outlook 并重新启动后出现问题。由于文件夹正在被 Outlook 持久化,下次 Outlook 启动并再次初始化 AddIn 时它仍然存在,因此文件夹创建失败,因为已存在同名对象。但我看不出有什么方法可以判断这是上次的“我的”文件夹。

我不想依靠它的名称来识别文件夹(这太不可靠了,甚至无法考虑;用户可能想要重命名它,可能存在其他创建同名文件夹的插件,更不用说本地化问题等了。 ),但我还能用什么来确定自定义文件夹已经创建?

我要么必须能够以某种方式在文件夹中添加一个“标签”,以便我以后可以将其识别为“我的” - 或者需要某种唯一标识文件夹的 id(即使在启动之间保持不变) Outlook!)所以我可以通过它识别它。

我一直在查看对象的EntryIDStoreID字段[MAPI]Folder,但从 MSDN 上的(可悲的是,不是很详细)描述中,我不确定我是否可以依赖它们,因为显然它们可以在某些条件下改变。

有什么建议么?

4

1 回答 1

1

除非文件夹被删除然后重新创建,否则条目不会更改。但无论如何它不会是同一个文件夹 - 只是另一个可能具有相同名称的文件夹。Outlook 所做的是将特殊文件夹的 entryid 存储在根 IPM 文件夹和/或收件箱文件夹中。由于您无法在 Exchange 中的文件夹上设置命名属性,并且您不能只选择自己的属性标签而不冒发生冲突的风险,因此请在收件箱文件夹(始终存在于默认存储中)中创建隐藏消息并存储文件夹条目 id以及您可能需要的任何其他配置属性。要确保您的配置隐藏消息是唯一的,请选择一个唯一的消息类,例如 IPM.Note.MyCompany.MyAdddin.Config。可以使用 Outlook 对象模型或 RDOFolder 中的 MAPIFolder.GetStorage 访问隐藏的邮件。

于 2012-01-20T17:01:29.433 回答