我使用Add-In Express获得了一个自定义Outlook 2013+加载项,主要功能区上有一个按钮,单击该按钮可更改所选邮件项的邮件类(以及其他实际有用的操作)。
除了Outlook中当前选定的文件夹是未读邮件文件夹之外,这在所有情况下都能正常工作。在此MailItem
中保存已更新的MessageClass
未读项目时,我收到错误消息:
The operation cannot be performed because the message has been changed.
如果通过阅读窗格设置自动读取项目,则会发生这种情况,但如果在单击按钮之前手动将消息标记为已读,则不。如果以相同的方式修改邮件项目的其他不太基本的属性(如主题),则不会发生这种情况。
以下示例说明了该问题(为简洁省略了边界检查/异常处理):
public void ChangeSelectedMailItemMessageClass()
{
var activeExplorer = _outlookApp.ActiveExplorer();
var selection = activeExplorer.Selection;
var item = selection[1] as MailItem;
item.MessageClass = "Some.Valid.Message.Class";
item.Save(); // 'The operation cannot be performed because the message has been changed.'
Plugin.Marshal.ReleaseComObject(item);
Plugin.Marshal.ReleaseComObject(selection);
Plugin.Marshal.ReleaseComObject(activeExplorer);
}
尝试为标准引用该用户属性的搜索文件夹中的项目设置自定义用户属性时,可以看到相同的行为,因此我怀疑它与搜索文件夹而不是未读邮件有关文件夹专门。
在修改selection
之前发布activeExplorer
和MailItem
引用没有任何区别,MailItem
从读取到修改的生命周期尽可能小制作(给出上面的片段)。
也许相关信息:
是否可以在未读邮件的情况下修改未读邮件的MessageClass
而不会出现错误?
修改:显示另一个已安装的加载项在此过程中干扰以某种方式,但不清楚我的加载项是如何或者是否可以以这样的方式进行编码,以便在另一个加载项的背面不会因为选定的MailItem
答案 0 :(得分:0)
似乎另一个已安装的加载项在某种程度上干扰了此实例中更改MessageClass
的过程,并且这是一个不兼容的问题,而不是修改项目的MessageClass
的基本问题未读邮件文件夹。
当然,在没有其他加载项活动的情况下复制问题应该是第一个停靠点!