设置Outlook邮件项目';以编程方式创建类别?

设置Outlook邮件项目';以编程方式创建类别?,outlook,office-interop,Outlook,Office Interop,对于以编程方式设置Outlook2007MailItem的类别,似乎没有太多信息或好的代码示例 ,并提到使用VB的拆分函数,或多或少地说“从这里开始,你就靠自己了,所以自己解决吧” 就我所知,我们将类别作为mailitem的逗号分隔字符串属性进行操作。它似乎有点原始,这就是它的全部吗 是不是每个人都只是挖掘出他们的字符串函数库并解析Categories属性,相信在为单个邮件项设置多个类别并且(但愿如此)重命名类别时不会陷入混乱?您可以选择任何方式来操作以逗号分隔的类别字符串。要插入一个类别,我通

对于以编程方式设置Outlook2007MailItem的类别,似乎没有太多信息或好的代码示例

,并提到使用VB的拆分函数,或多或少地说“从这里开始,你就靠自己了,所以自己解决吧”

就我所知,我们将类别作为mailitem的逗号分隔字符串属性进行操作。它似乎有点原始,这就是它的全部吗


是不是每个人都只是挖掘出他们的字符串函数库并解析Categories属性,相信在为单个邮件项设置多个类别并且(但愿如此)重命名类别时不会陷入混乱?

您可以选择任何方式来操作以逗号分隔的类别字符串。要插入一个类别,我通常会检查当前字符串是否为null,然后分配它。如果类别不是空的,那么如果它不存在,我会附加它。要删除项目,我只需将类别名称替换为空字符串

添加类别
var customCat=“自定义类别”;
if(mailItem.Categories==null)//未分配当前类别
mailItem.Categories=customCat;
如果(!mailItem.Categories.Contains(customCat))//作为第一个指定的类别插入,则为else
mailItem.Categories=string.Format(“{0},{1}”,customCat,mailItem.Categories);
删除类别
var customCat=“自定义类别”;
if(mailItem.Categories.Contains(customCat))
mailItem.Categories=mailItem.Categories.Replace(string.Format(“{0}”,customCat),”).Replace(string.Format(“{0}”,customCat),”);
操作字符串的方法有很多种——它们只是选择在底层保持序列化数据结构的简单

我倾向于在外接程序启动期间创建自己的类别,以验证它们是否存在。当然-类别重命名是一个问题,但是如果您确保每次加载外接程序时类别都存在,那么您至少可以确保某种程度的有效性

要管理Outlook类别,可以使用。
var customCat=“自定义类别”;
if(Application.Session.Categories[customCat]==null)
Application.Session.Categories.Add(customCat、Outlook.OlCategoryColor.olCategoryColorDarkRed);

仅在@SilverNija-MSFT帖子中包含最后一条信息。在完成以下操作后:

 var customCat = "Custom Category";
 if (mailItem.Categories == null) // no current categories assigned
   mailItem.Categories = customCat;
 else if (!mailItem.Categories.Contains(customCat)) // insert as first assigned category
   mailItem.Categories = string.Format("{0}, {1}", customCat, mailItem.Categories);
请不要忘记,最重要的是,以这种方式更新mailItem的实例:

mailItem.Save();

因为,有时一堆邮件在循环中时没有更新,所以我解决了这个问题。

Hi,我只是尝试了一下,但是类别没有更新。它运行指令
mailItem.Categories=customCat没有问题,但它不会显示在Outlook中。我应该保存还是做些什么?您需要发出一个命令来保存任何元数据更改,谢谢!很简单,但我完全错过了!仅供参考:分隔符已本地化(这是一个愚蠢的想法)
此属性使用Windows注册表中HKEY\U CURRENT\U USER\Control Panel\International下的值名称sList中指定的字符作为多个类别的分隔符。
注意,您可以确保使用的是当前区域性“列表dilimiter”使用mailItem.Categories=$“{customCat}{System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator}{mailItem.Categories}”;