如何找出要提供给 IExchangeManageStore::GetMailboxTable 的信息存储的可分辨名称?

StackOverflow https://stackoverflow.com/questions/80831

有一个 微软知识库文章 包含打开给定信息存储中所有邮箱的示例代码。到目前为止它可以工作(需要一点 复制和粘贴 在比 VC++ 6.0 更新的编译器上)。

在某一时刻,它使用信息存储的可分辨名称调用 IExchangeManageStore::GetMailboxTable。对于 Exchange 2007 试用虚拟服务器映像,它必须如下所示:

"/o=Litware Inc/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=servers/cn=DC1".

使用 Outlook间谍软件 单击 IMsgStore 和 IExchangeManageStore 将显示“Server DN:”旁边所需的字符串。

我想避免强迫用户将其放入配置文件中。因此,如果 OutlookSpy 可以做到这一点,那么我的应用程序如何找出当前打开的邮箱所在的信息存储的可分辨名称?

有帮助吗?

解决方案

我认为必须有一个纯粹的 MAPI 解决方案,我相信我已经弄清楚 OutlookSpy 是如何做到这一点的。


下面的代码片段,插入之后

printf("Created MAPI session\n");

在示例中 KB194627, ,将显示 服务器DN.

LPPROFSECT lpProfSect;
hr = lpSess->OpenProfileSection((LPMAPIUID)pbGlobalProfileSectionGuid, NULL, 0, &lpProfSect);
if(SUCCEEDED(hr))
{
    LPSPropValue lpPropValue;
    hr = HrGetOneProp(lpProfSect, PR_PROFILE_HOME_SERVER_DN, &lpPropValue);
    if(SUCCEEDED(hr))
    {
        printf("Server DN: %s\n", lpPropValue->Value.lpszA);
        MAPIFreeBuffer(lpPropValue);
    }
    lpProfSect->Release();
}



更新:
有这个功能 获取服务器DN 在里面 EDK 5.5源代码, ,它提取了 服务器DN 从给定的会话 PR_EMS_AB_HOME_MTA. 。如果其他方法不可靠,我会尝试一下。

其他提示

它将位于 Active Directory 中,因此您可以使用 ADSI/LDAP 来查看 CN=Microsoft Exchange、CN=Services、CN=Configuration、DC=例子,直流=com. 。使用 Sysinternals 的 ADExplorer 进行挖掘以找到您正在寻找的值。

我会下载 MFCMapi 的源代码,看看他们是如何做到这一点的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top