0

我正在尝试使用 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);    
4

2 回答 2

1

那是 Exchange 配置文件吗?您确定您打开的是主邮箱而不是 PF 商店吗?

Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook、CDO 和 MAPI 开发工具

于 2010-03-22T21:04:52.573 回答
1

调用MAPIInitialize时是否传入MAPIINIT_0结构中的 MAPI_NT_SERVICE 标志?在服务中运行时,我从来没有传递它,所以我不确定如果你不这样做会发生什么。MSDN 文档说这是必需的。

MAPI_NT_SERVICE

调用方作为 Windows 服务运行。不作为 Windows 服务运行的调用者不应设置此标志;作为服务运行的调用者必须设置此标志。

于 2010-03-24T03:51:42.020 回答