代码之家  ›  专栏  ›  技术社区  ›  spoulson

使用MAPI W/C++,我如何打开另一个用户的收件箱?

  •  1
  • spoulson  · 技术社区  · 16 年前

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

    因为这将在服务器上运行,所以我不希望安装outlook。相反,我可以安装 MAPI client 。然后我创建了一个简单的MAPI应用程序,该应用程序使用 MAPILogonEx() MAPI_LOGON_UI 旗帜。但是,基本MAPI客户端没有配置其他用户邮箱的功能。作为一项要求,我只能将此脚本作为监视应用程序的服务帐户运行,因此无法告诉它作为我想要的邮箱的帐户运行。

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

    3 回复  |  直到 10 年前
        1
  •  1
  •   Henk    16 年前

    强烈建议使用Microsoft Exchange MAPI客户端(如您所链接的)。它的设计要比这些库的outlook版本强大得多。您应该发现outlook和exchange服务器之间的api与扩展mapi没有区别。

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

        2
  •  1
  •   Ross Rogers    10 年前

    我懂了。。。我不知道该怎么做;这通常是打电话的副作用 CreateStoreEntryID 用错了旗子。你要做的可能是:

    1. 得到一个 IID_IExchangeManageStore 从默认邮件存储区
    2. 呼叫 createStoreEntryID
    3. 然后按条目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 新闻组。

        3
  •  0
  •   Cain T S Random    16 年前

    你查过configuremsgservice吗?我相信这适用于exchange mapi,或者你是说你尝试了但没有成功?