如何以编程方式更新Outlook联系人姓名解析顺序

时间:2008-10-10 20:35:08

标签: outlook registry exchange-server

在Outlook 2003中,打开“地址簿”,选择“工具” - >“选项”。您将获得显示“发送邮件时”选项的地址对话框,按以下顺序使用这些地址列表检查名称:“

Address dialog

对于大多数人来说,这只包含“联系人”。对于企业网络,它可能还包含“全局地址列表”。问题在于,在我的公司中,GAL数以万计,并且在尝试发送电子邮件时,在名称解析中发生冲突并且在另一个国家/地区向错误的人发生冲突是很常见的。

相反,我想在该列表的顶部放置一个单独的Exchange地址列表“X”,以便在检查GAL之前首先解析我们公司中的名称。然后,解决“联系人”,然后解决GAL。这种配置需要部署到数百台PC上。

我已经能够通过黑客注册表项在我自己的PC上执行此操作: HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\your_profile_name\9207f3e0a3b11019908b08002b2a56c2,价值11023d05

这包含一个REG_BINARY数据结构,列出了此列表项的ID。我可以按照自己的喜好对它们进行重新排序,Outlook会接受它。

GAL和“X”地址列表的ID是静态的。然而,问题是“联系人”ID显然不是静态的,可能对用户和/或计算机是唯一的。它的价值似乎在登记处是不可发现的。这使我无法简单地将此注册表值复制到所有PC。

是否有人能够以编程方式重新排序联系人姓名解析列表?

3 个答案:

答案 0 :(得分:3)

我过去曾为一家公司做过这件事。它是一个.NET应用程序,在每台PC上运行并重新排序此列表。

这是您需要开始的地方:

http://msdn.microsoft.com/en-us/library/bb820991.aspx

答案 1 :(得分:1)

对于那些感兴趣的人,我发布了我在博客上创建的MAPI工具,其源代码是原生C ++。享受。

http://www.explodingcoder.com/cms/content/programmatically-updating-outlooks-address-book-options-with-a-command-line-tool

答案 2 :(得分:0)

在扩展MAPI级别,您可以使用IAddrBook.SetSearchPath(仅限C ++或Delphi)

如果使用Redemption是一个选项(几乎支持所有语言,包括所有.Net语言),您可以使用RDOSession.AddressBook.SearchPath来访问或操作地址簿搜索路径顺序 - 请参阅http://www.dimastr.com/redemption/RDOAddressBookSearchPath.htm < / p>