我的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帐户邮件地址的值?
答案 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地址。