我使用救赎(http://dimastr.com/redemption/home.htm)来开发我的Outlook Addin。当我尝试第一次在sta-thread(!)中getMessageFromid时,这一切都很好,但是下次我会得到mapi_e_e_unknown_entryid。
RDOSession rdoSession = null;.
rdoSession = new RDOSession();
if (rdoSession != null)
{
if (!rdoSession.LoggedOn)
rdoSession.Logon(Consts.ProfileName);
if (rdoSession.LoggedOn)
{
for (int c = 1; c <= rdoStoresCnt; c++)
{
/* other code */
RDOMail mail = null;
try
{
mail = rdoSession.GetMessageFromID(entryID);
/* other code */
}
catch (Exception ex)
{
if (mail != null) Marshal.ReleaseComObject(mail); mail = null;
}
finally
{
if (mail != null) Marshal.ReleaseComObject(mail); mail = null;
}
}
}
}
我在做什么错?
MAPI_E_UNKNOWN_ENTRYID
表示当前的MAPI会话(通过调用RDOSession.Logon
创建)不知道应该处理哪个MAPI提供商处理指定的入口ID,因为(最有可能)尚未加载提供商该会话并有机会在会话中使用MAPI系统注册其一组入口ID。
拨打GetMessageFromId
时,您可以尝试指定商店条目ID(赎回将首先打开指定的商店并调用IMsStore::OpenEntry
而不是IMAPISession::OpenEntry
),但是真正的解决方案是避免创建一个全新的Mapi会话 - 因为您的代码是您的代码是Inside Outlook,Outlook使用了MAPI会话:只需将RDOSession.MAPIOBJECT
属性设置为从Outlook设置为Namespace.MAPIOBJECT
即可。do 不是在这种情况下调用RDOSession.Logoff
。