自定义属性MAPI_E_OBJECT_CHANGED

时间:2016-04-26 14:44:35

标签: c# outlook mapi outlook-redemption

我正在开发一个需要在邮件项目上存储一些数据的插件。我使用了Redemption库和MAPI.Utils HrSetOneProp方法。

仅在Outlook 2016中,我得到" IMAPIProp :: SaveChanges中的错误:MAPI_E_OBJECT_CHANGED"每次我在同一个mailitem上再次调用该方法时。

尝试使用Redemption RDO对象,以及具有相同结果的普通OOM。

以下是一个例子:

SafeMailItem m = RedemptionGM9.SafeMailItem;
m.Item = mailItem; // this mailitem came as parameter in the function and it is the activeExplorer slection      
MAPIUtils utils = RedemptionGM9.MAPIUtils;

string sGUID = PS_PUBLIC_STRINGS.ToString("B");
int iID = m.GetIDsFromNames(sGUID, GMLINK);
if (iID != 0)
{
   //this is the method that is failing every second time for the same mailitem until you restart outlook.
   utils.HrSetOneProp(mailItem.MAPIOBJECT, iID, bForceGMPropTrue ? true :  !String.IsNullOrEmpty(sAccNo), true);
}

Marshal.ReleaseComObject(utils);
utils = null;
Marshal.ReleaseComObject(m);
m = null;

//mailitem com object is released outside this method

1 个答案:

答案 0 :(得分:0)

首先,不推荐使用MAPIUtils对象,并且没有理由使用它 - safeMailItem实现相同的方法(safeMailItem.GetIdsFromNames / Fields [])。

其次,为什么你为MAPIUtils.HrSetOneProp中的第二个参数传递true(Save)?当用户想要这样做时,您不希望Outlook保存该项吗?

MailItem来自哪里?