【问题标题】:How to identify "my" custom folder in an Outlook AddIn如何在 Outlook 插件中识别“我的”自定义文件夹
【发布时间】:2012-02-15 05:06:13
【问题描述】:

我正在尝试开发一个插件——或者更确切地说,现在只是一个概念验证,看看我的想法是否真的可行——用于 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 时它仍然存在,因此文件夹的创建失败,因为已存在同名对象。但我看不出有什么方法可以判断这是上次的“我的”文件夹。

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

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

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

有什么建议吗?

【问题讨论】:

    标签: c# add-in mapi outlook-2010


    【解决方案1】:

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

    【讨论】:

    • 所以我现在使用EntryID来识别文件夹,但我没有将它保存在隐藏消息中;相反,我将它与 AddIn 的配置设置(存储在用户的应用程序数据配置文件文件夹中的文件中)放在一起。不过,我会记住隐藏消息的技巧,以防万一我的方法没有达到我想要的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多