Exchange server 使用MAPI w/C++;,如何打开另一个用户';s的收件箱?

Exchange server 使用MAPI w/C++;,如何打开另一个用户';s的收件箱?,exchange-server,mapi,Exchange Server,Mapi,我希望编写一个自动监视脚本,以编程方式从其他用户的Exchange2003收件箱检索信息。我使用C++代码登录到MAPI并连接到自己的收件箱。我还可以使用控制面板->邮件小程序将另一个用户的邮箱配置到我的配置文件中,我的代码可以通过这种方式访问。不过,这是在安装了Outlook的桌面上完成的,Outlook提供了更丰富的邮件配置文件编辑器 因为这将在服务器上运行,所以我不希望安装Outlook。相反,我可以安装。然后,我创建了一个简单的MAPI应用程序,使用带有MAPI\u LOGON\u UI

我希望编写一个自动监视脚本,以编程方式从其他用户的Exchange2003收件箱检索信息。我使用C++代码登录到MAPI并连接到自己的收件箱。我还可以使用控制面板->邮件小程序将另一个用户的邮箱配置到我的配置文件中,我的代码可以通过这种方式访问。不过,这是在安装了Outlook的桌面上完成的,Outlook提供了更丰富的邮件配置文件编辑器

因为这将在服务器上运行,所以我不希望安装Outlook。相反,我可以安装。然后,我创建了一个简单的MAPI应用程序,使用带有
MAPI\u LOGON\u UI
标志的
MAPILogonEx()
弹出邮件配置文件向导。但是,基本MAPI客户端没有配置其他用户邮箱的功能。根据要求,我只能以监视应用程序的服务帐户的身份运行此脚本,因此我无法告诉它以我想要的邮箱帐户的身份运行


是否仍然可以使用基本MAPI客户端连接到其他用户的邮箱(假定已授予权限)?还是绝对有必要安装Outlook以实现此功能?

您是否查看了ConfigureMsgService?我相信这对Exchange MAPI有效,或者您是说您尝试过,但没有成功

我明白了。。。我不知道如何明确地做到这一点;这通常是使用错误标志调用
CreateStoreEntryID
的副作用。您希望做的可能是:

  • 从默认消息存储中获取
    IID\u IExchangeManageStore
  • 调用
    CreateStoreEntryID
  • 然后按条目ID打开该存储

    LPEXCHANGEMANAGESTORE mapiObject = NULL;
    
    store->QueryInterface( IID_IExchangeManageStore, (LPVOID *) &mapiObject);
    
    mapiObject->CreateStoreEntryID( server, mailbox, OPENSTORE_TAKE_OWNERSHIP | 
        OPENSTORE_USE_ADMIN_PRIVILEGE, &len, &buffer);
    
    //Call OpenEntry on the entry id
    

  • 如果需要更详细的示例,请在MFC MAPI项目的源代码中搜索
    CreateStoreEntryID
    。如果您还有其他问题,最好在microsoft.public.win32.programmer.messaging新闻组中找到答案。

    我强烈建议您使用microsoft Exchange MAPI客户端(如您所链接的)。它被设计成比这些库的Outlook版本更健壮。您应该发现Outlook和Exchange Server的API在扩展MAPI方面没有什么不同


    您需要使用扩展MAPI(如Cain T S Random所述)打开其他邮件存储,当然,您的应用程序需要以Windows用户身份登录,并在Exchange服务器上具有相应的权限。

    IMsgServiceAdmin::ConfigureMsgService将为配置文件设置邮箱。我真正想要的是一种添加额外邮箱的方法。在Outlook中执行此操作时,MAPI会将它们视为其他IMsgStore条目。如果没有展望,这怎么能做到呢?我对这个话题的研究与这个建议是一致的。然而,找到提供IExchangeManageStore的二进制文件和头文件似乎是不可能的;已从MS下载中删除。还有其他地方吗?