繁体   English   中英

C# Outlook 插件:如何以编程方式删除用户定义的属性?

[英]C# Outlook Add-in: How can I delete a User-defined property programmatically?

我几乎在我能想象到的所有地方都尝试过找到这个问题的答案,包括在 StackOverflow 上。 不幸无济于事。 所以就在这里。

我正在开发一个 Outlook 插件(使用 Outlook 2021),并开发了一些代码来创建一些专门用于该插件的 ItemProperties。 现在,当创建这些属性时,我可以在 go 到 View->Settings->Advanced View Settings->Columns 时看到它们,如屏幕截图所示。

Outlook 中用户定义字段的屏幕截图

但是,在某些情况下,我想完全删除这些属性。 正如图中所指出的那样,我知道如何手动执行此操作,我无法通过 C# 以编程方式执行此操作。 我已经做到了从包含这种属性的每封邮件中删除属性,如下所示:

IEnumerable<MailItem> listOfAssignedEmails = itemsToProcess.Where(
    t => t.ItemProperties[MailExpiration.ExpirationDatePropertyName] != null);
foreach (MailItem email in listOfAssignedEmails)
{
    // Note: The Delete() operation is deprecated. A more up-to-date method must be found.
    email.ItemProperties[MailExpiration.ExpirationDatePropertyName].Delete();
    email.Save();
}

...是的,我知道 Delete() 操作已被弃用; 但是,我找不到从 email 中删除 ItemProperty 的另一种方法(欢迎提出任何建议)。

基本上,这个属性的删除只会很少进行(例如,如果用户选择卸载插件。但是,如果有任何方法可以自动删除该属性,我很乐意知道。

任何建议将不胜感激。

使用ItemProperties.Remove方法从集合中删除 object。

使用ItemProperties属性返回ItemProperties集合。 使用ItemProperties.Item(index) ,其中 index 是 object 的名称或集合中项目的数字 position,以返回单个ItemProperty ZA8CFDE6331BD59EB2AC96F8911C4B6666Z。

从所有已经拥有自定义属性的电子邮件中删除自定义属性确实是个坏主意:实际上没有意义,因为用户永远不会看到它们,但是您将不得不润饰(并因此更改最后修改日期)一个大的电子邮件的数量。

另请注意,MAPI 中的命名属性是有限资源 - 邮箱中最多可以有 64k 个。 一旦使用了特定的属性映射,您就永远无法取消映射它,即使没有使用该属性的项目。

第三,做任何与安装程序(而不是 VSTO 插件)相关的 Outlook 是一个非常糟糕的主意 - Windows 安装程序在服务中运行。

如果您想确保用户不再将您的自定义字段视为视图中的可用属性,您需要处理文件夹字段 - 它们存储在该文件夹中隐藏(关联)消息的 blob 中。 OOM 根本不公开文件夹字段(如果您在调用UserProperties.Add时不计算AddToFolderFields参数)。 如果使用Redemption是一个选项,它会公开允许添加或删除文件夹字段的RDOFolderFields object(可从RDOFolder2 . FolderFields属性访问)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM