从注册表中获取主 Exchange 帐户邮件地址

Get primary Exchange account mail address from registry

我的默认邮件配置文件中有 MS Exchange 帐户作为我的主要邮件帐户。我需要在某些 VBScript 中以编程方式获取其邮件地址。

我已经安装了 Outlook,所以我可以这样做:

MsgBox CreateObject("Outlook.Application").GetNamespace("MAPI").CurrentUser.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E")

但只有当Outlook是运行时,我在Outlook中也有安全提示,所以我不能使用这种方法。

我发现有关配置文件和帐户的大量信息存储在 HKEY_CURRENT_USER\Software\Microsoft\Office.0\Outlook\Profiles\ 下的注册表中 我在默认配置文件 9375CFF0413111d3B88A00104B2A6676 的子项中找到了 POP3 和 IMAP 帐户的 Email 值,但 Exchange 帐户的 none 值。

在注册表中哪里可以找到当前用户的 Exchange 帐户邮件地址的值?

enter link description here您的默认配置文件的名称存储在

HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\DefaultProfile

使用 Redemption (RDO) 代替标准的 Microsoft 工具 (CDO),你有更好的工具,没有安全提示。

RDOSession.Logon method, which takes several parameters, including the MAPI profile name (pass an empty string to use the default MAPI profile)

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Inbox = Session.GetDefaultFolder(olFolderInbox)
for each Msg in Inbox.Items
  Debug.Print(Msg.Subject)
next

另一种选择是使用 ADSI 并执行 LDAP 查询。 参见 this answer。 另见 this.

Set MyUser = GetObject ("LDAP://CN=Administrator,CN=Users,DC=sunnydale,DC=muni")
For each email in MyUser.proxyAddresses
       WScript.Echo email
Next

我不喜欢在这种情况下使用救赎的想法。它不是免费的,需要额外的动作才能使用。无论如何,我找到了我原来问题的答案。

要在最终用户计算机上获取 Outlook Exchange 帐户的用户主 SMTP 地址,您需要在注册表中搜索默认邮件配置文件的键(HKEY_CURRENT_USER\Software\Microsoft\Office.0\Outlook\Profiles\<default profile name>HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\<default profile name> 旧版本Outlook) 为名为 001f6641 的值。这个值数据是二进制格式,包含这样形式的邮件地址 SMPT:john@example.com,只需将 SMTP: 部分剪掉即可获得邮件地址。

您无法使用 Outlook 2003 解决的问题。对于这种情况,您可以以相同的方式在注册表中搜索包含 legacyExchangeDN 的名为 001e660b 的值。然后你进行 LDAP 查询(默认情况下可能是 Exchange AD)以找到具有 legacyExchangeDN 的人。您需要的是 proxyAddresses 字段。它有多个值,以 SMTP:(大写很重要)开头的值包含主 SMTP 地址。