当用户注销并且使用MAPI在windows应用程序中访问Outlook 2016/2019时,会引发MAPI_E_FAI



在Windows应用程序中,当我试图仅在用户注销时打开'Outlook'2016 Outlook配置文件的默认主存储时,调用OpenMsgStore函数会引发错误。当用户登录时,所有MAPI函数都能成功工作。

HRESULT hr = MAPILogonEx(0,
const_cast<LPTSTR>((LPCTSTR)m_strProfileTemplate), NULL,
MAPI_EXTENDED | MAPI_NEW_SESSION | MAPI_NO_MAIL | MAPI_UNICODE,
&m_pSession);
SRestriction sres;
SPropValue spv;
LPSRowSet pStores = NULL;
hr = m_pSession->GetMsgStoresTable(0, &pStoresTable);
sres.rt = RES_PROPERTY;                          
sres.res.resProperty.relop = RELOP_EQ;
sres.res.resProperty.ulPropTag = PR_DEFAULT_STORE;
sres.res.resProperty.lpProp = &spv;
spv.ulPropTag = PR_DEFAULT_STORE;
spv.Value.b   = TRUE;
hr = HrQueryAllRows(pStoresTable,(LPSPropTagArray) &sptCols,&sres,NULL,0,&pStores);

ULONG flags = MDB_WRITE| MDB_NO_MAIL;
hr = m_pSession->OpenMsgStore(NULL,pStores->aRow[0].lpProps[0].Value.bin.cb,
(LPENTRYID)pStores->aRow[0].lpProps[0].Value.bin.lpb,
NULL,
flags | MDB_ONLINE,
&pPrimaryMessageStore);

当用户从系统注销并且服务执行上述代码时,对OpenMsgStore的调用失败,并出现MAPI_E_FAILONEPROVIDER错误。但是,当用户登录到系统时,此功能是成功的。

如果试图作为计划服务访问outlook的用户已从系统注销,MAPI将如何工作?

尝试将MAPI_NT_SERVICE标志包含到MAPILogonEx调用中。

这意味着调用方正在作为Windows服务运行。未作为Windows服务运行的调用程序不应设置此标志;作为服务运行的调用方必须设置此标志。

AFAIK如果使用OAuth,MAPI系统将无法找到缓存的凭据,并且打开邮件存储失败。

相关内容

  • 没有找到相关文章

最新更新