使用带有 C++ 的 MAPI,我如何打开另一个用户的收件箱?
Posted
技术标签:
【中文标题】使用带有 C++ 的 MAPI,我如何打开另一个用户的收件箱?【英文标题】:Using MAPI w/ C++, how can I open another user's Inbox? 【发布时间】:2008-12-08 16:48:22 【问题描述】:我希望编写一个自动监控脚本,以编程方式从另一个用户的 Exchange 2003 收件箱中检索信息。我有工作的 C++ 代码来登录 MAPI 并连接到我自己的收件箱。我还可以使用控制面板->邮件小程序将另一个用户的邮箱配置到我的个人资料中,我的代码可以通过这种方式访问。但是,这是在我安装了 Outlook 的桌面上完成的,它提供了更丰富的邮件配置文件编辑器。
由于这将在服务器上运行,我宁愿根本不安装 Outlook。相反,我可以安装MAPI client。然后我创建了一个简单的 MAPI 应用程序,它使用带有 MAPI_LOGON_UI
标志的 MAPILogonEx()
弹出邮件配置文件向导。但是,基本 MAPI 客户端不具备配置其他用户邮箱的功能。作为要求,我只能将这个脚本作为监控应用程序的服务帐户运行,所以我不能让它作为我想要的邮箱的帐户运行。
是否仍然可以使用基本 MAPI 客户端连接到另一个用户的邮箱(假设已授予权限)?或者是否绝对有必要为此功能安装 Outlook?
【问题讨论】:
【参考方案1】:我强烈建议使用 Microsoft Exchange MAPI 客户端(如您所链接的那样)。它被设计为比这些库的 Outlook 版本更强大。您应该会发现在扩展 MAPI 方面,Outlook 和 Exchange Server 之间的 API 没有什么不同。
您将需要使用扩展 MAPI(如 Cain T S Random 所述)来打开其他邮件存储,当然您的应用程序需要在 Exchange 服务器上以具有适当权限的 Windows 用户身份登录。
【讨论】:
【参考方案2】:我明白了...我不确定如何明确地做到这一点;这通常是使用错误标志调用CreateStoreEntryID
的副作用。你想要做的可能是:
-
从您的默认消息存储中获取
IID_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
新闻组。
【讨论】:
我对该主题的研究同意这个建议。但是,要找到为您提供 IExchangeManageStore 的二进制文件和标头似乎是不可能的。从 MS 下载中删除。它仍然可以在任何地方使用吗?【参考方案3】:您是否查看过 ConfigureMsgService?我相信这适用于 Exchange MAPI,或者您是说您尝试过但没有用?
【讨论】:
IMsgServiceAdmin::ConfigureMsgService 将为配置文件设置邮箱。我真正想要的是一种添加附加邮箱的方法。当您在 Outlook 中执行此操作时,MAPI 将它们视为附加的 IMsgStore 条目。没有 Outlook 怎么办?以上是关于使用带有 C++ 的 MAPI,我如何打开另一个用户的收件箱?的主要内容,如果未能解决你的问题,请参考以下文章