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

时间:2015-04-17 18:31:47

标签: email vbscript outlook registry exchange-server

我的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\15.0\Outlook\Profiles\下的注册表中 我在默认配置文件中Email的子项中找到了POP3和IMAP帐户的9375CFF0413111d3B88A00104B2A6676值,但对于Exchange帐户都没有。

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

2 个答案:

答案 0 :(得分:2)

enter link description here默认个人资料的名称存储在

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

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

  

RDOSession.Logon方法,它包含几个参数,包括   MAPI配置文件名称(传递空字符串以使用默认MAPI   轮廓)

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

答案 1 :(得分:1)

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

要在最终用户计算机上获取Outlook Exchage帐户的用户主SMTP地址,您需要在默认邮件配置文件的密钥中搜索注册表(HKEY_CURRENT_USER\Software\Microsoft\Office\15.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无法实现的不好部分。对于这种情况,您可以使用包含001e660b的名为legacyExchangeDN的值以相同的方式搜索注册表。然后,您进行LDAP查询(默认情况下可能是Exchange AD)以查找具有该legacyExchangeDN的人员。你需要的是proxyAddresses字段。它有多个值,以SMTP:(大写很重要)开头的值包含主SMTP地址。

相关问题