更改了未读邮件的MessageClass"未读邮件"无错误地保存文件夹

时间:2018-01-03 09:04:37

标签: c# outlook outlook-addin addin-express

我使用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之前发布activeExplorerMailItem引用没有任何区别,MailItem从读取到修改的生命周期尽可能小制作(给出上面的片段)。

也许相关信息:

  • Outlook 2016虽然在2013年重复
  • 使用加载项快速但怀疑无关
  • 据我所知,COM对象尽快被释放
  • Outlook连接到Exchange
  • 在线与离线模式没有区别,错误是相同的
  • 邮件位于我自己的收件箱或某个子文件夹中,当时没有其他邮箱连接到Outlook

是否可以在未读邮件的情况下修改未读邮件的MessageClass而不会出现错误?

修改:显示另一个已安装的加载项在此过程中干扰以某种方式,但不清楚我的加载项是如何或者是否可以以这样的方式进行编码,以便在另一个加载项的背面不会因为选定的MailItem

而获得广告素材

1 个答案:

答案 0 :(得分:0)

似乎另一个已安装的加载项在某种程度上干扰了此实例中更改MessageClass的过程,并且这是一个不兼容的问题,而不是修改项目的MessageClass的基本问题未读邮件文件夹。

当然,在没有其他加载项活动的情况下复制问题应该是第一个停靠点!