我正在开发一个需要在邮件项目上存储一些数据的插件。我使用了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
答案 0 :(得分:0)
首先,不推荐使用MAPIUtils对象,并且没有理由使用它 - safeMailItem实现相同的方法(safeMailItem.GetIdsFromNames / Fields [])。
其次,为什么你为MAPIUtils.HrSetOneProp中的第二个参数传递true(Save)?当用户想要这样做时,您不希望Outlook保存该项吗?
MailItem来自哪里?