【问题标题】:RDOMail UserProperties not being created未创建 RDOMail 用户属性
【发布时间】:2013-12-22 05:20:20
【问题描述】:

我正在使用 Redemption 在电子邮件对象列表上创建一些 UserProperties,并且我在 Outlook 2013 加载项中有这四行:

RDOMail rdoMail = Globals.ThisAddIn.session.GetMessageFromID(folder.Items[1].EntryID);
RDOUserProperty rdoUP = rdoMail.UserProperties.Add("PropertyName", rdoUserPropertyType.olText, Type.Missing, Type.Missing);
rdoUP.Value = "value";
rdoMail.Save();

但是没有创建用户属性。

有人知道为什么吗?

【问题讨论】:

  • 您确定在正确的项目上设置属性吗? folder.Items[1] 将返回您在 Outlook Explorer 中看到的第一条消息。
  • 是的,它将返回第一条消息。实际上,有一个变量“i”可以获取文件夹中的所有Items。我已经尝试了一切,但没有以某种方式设置属性。
  • 你检查属性没有设置吗?您是否使用 OutlookSpy(单击 IMessage 按钮)查看邮件?
  • 我查看了邮件列表列中的用户定义字段,它们通常出现在那里,但这次没有。
  • 是的,它使用 OutlookSpy,谢谢!

标签: outlook-addin outlook-redemption


【解决方案1】:

Outlook 无法看到使用 MAPI 所做的更改 - 即使您不使用 Redemption,您也会遇到同样的问题:如果您从两台计算机连接到同一个 Exchange 邮箱,则在一台计算机上所做的更改将在另一台计算机上不可见,直到有问题的项目被完全取消引用并重新打开。

经验法则是避免使用 OOM 打开项目,或者(如果必须)在使用 Marshal.ReleaseComObject 完成后立即释放它。您还需要小心避免使用多个点表示法,以确保编译器不会创建隐式变量(您无法引用)。

【讨论】:

  • 好的,在这种情况下我应该发布什么。我已经尝试发布 rdoUserProperties、rdoMail 和什么都没有,我仍然需要重新启动 Outlook。
  • 最奇怪的部分是为什么它昨天工作而不是今天?甚至我的 GF 都比这更稳定!
  • 这只发生在 Outlook 中当前选定的项目还是文件夹中的所有项目?您使用 OOM 打开项目的实际代码是什么?在上面的代码中,不要使用 OOM
  • GC.Collect() 的调用起到了神奇的作用,正如你所说的,它们必须使用Marshal.ReleaseComObject() 释放,然后它们肯定被释放但没有被垃圾收集,所以这条线使它工作。感谢您的帮助!
  • Marshal.ReleaseComObject 应该足够了。如果您需要调用 GC.Collect(),这表明您没有使用 Marshal.ReleaseComObject 释放所有 COM 对象,或者由于多个点符号(例如 rdoUP = rdoMail.UserProperties.Add 将创建一个隐式变量来保存 rdoMail.UserProperties 属性的值)。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 2018-02-21
  • 2018-02-15
相关资源
最近更新 更多