我正在尝试使用MAPI打开用户的MessageStore。奇怪的是,当我运行这个控制台应用程序时,当我与用户一起登录时,一切正常。
但是当我将其作为Windows服务运行时,我在尝试打开MessageStore时会收到MAPI_E_NOT_FOUND。
我已将服务配置为以用户身份运行。
MapiLogonEx似乎工作正常,GetMsgStoreTables也给我正确的结果(我确认MessageStore的EntryID是正确的。)
这是我的代码:
LPMAPITABLE pStoresTbl = NULL;
m_lpMAPISession->GetMsgStoresTable(0, &pStoresTbl);
// Query Collumns
LPSPropTagArray pTags = NULL;
LPSRowSet pRows = NULL;
pStoresTbl->SeekRow(BOOKMARK_BEGINNING,0,NULL);
pStoresTbl->QueryRows(
LONG_MAX,
NULL,
&pRows);
LPSBinary lpEntryID = NULL;
ULONG iprops;
for (iprops = 0; iprops < pRows->aRow[0].cValues; iprops++)
{
SPropValue sProp = pRows->aRow[0].lpProps[iprops];
if (PROP_ID(sProp.ulPropTag) == PROP_ID(PR_ENTRYID))
{
lpEntryID = &sProp.Value.bin;
break;
}
}
lpMDB = NULL;
HRESULT hres = m_lpMAPISession->OpenMsgStore(NULL,
lpEntryID->cb,
(LPENTRYID) lpEntryID->lpb,
NULL,
MDB_NO_DIALOG |
MDB_NO_MAIL | // spooler not notified of our presence
MDB_TEMPORARY | // message store not added to MAPI profile
MAPI_BEST_ACCESS,
&lpMDB);
答案 0 :(得分:1)
这是Exchange个人资料吗?您确定要打开主邮箱而不是PF商店吗?
Dmitry Streblechenko(MVP) http://www.dimastr.com/ OutlookSpy - Outlook,CDO 和MAPI开发人员工具
答案 1 :(得分:1)
调用MAPIINIT_0时,是否传递MAPIInitialize结构中的MAPI_NT_SERVICE标志?我在运行服务时从来没有没有传递它,所以如果不这样做,我不确定会发生什么。 MSDN文档说它是必需的。
MAPI_NT_SERVICE
来电者是 作为Windows服务运行。呼叫者 不是作为Windows运行的 服务不应设置此标志; 作为服务运行的呼叫者 必须设置此标志。