代码之家  ›  专栏  ›  技术社区  ›  Jan Gressmann

在openmsgstore上找不到mapi

  •  0
  • Jan Gressmann  · 技术社区  · 16 年前

    我正在尝试使用MAPI打开用户的邮件存储区。奇怪的是,当我运行这个控制台应用程序时,当我和用户登录时,一切都正常。

    但是,当我作为Windows服务运行此服务时,在尝试打开邮件存储时,我会得到未找到的MAPI。

    我已经将服务配置为以用户身份运行。

    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);    
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   user269730    16 年前

    这是一个交换配置文件吗?您确定要打开主邮箱而不是pf存储吗?

    Dmitry Streblechenko(MVP) http://www.dimastr.com/ outlookspy-展望,CDO 和MAPI开发工具

        2
  •  1
  •   Joe Doyle    16 年前

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

    MaijnntService

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