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

问题描述:

在Outlook 2003中打开通讯簿时,选择工具 - >选项。你得到显示选项地址对话框“发送邮件时,请按以下顺序使用这些地址列表名称:”如何以编程方式更新Outlook联系人姓名解析顺序

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。

有没有人能够在程序中重新排列联系人名称解析列表?

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

这就是你需要开始:

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

+0

谢谢。使用这个例子,我能够构建一个本地C++项目来完成工作。 – spoulson 2008-10-15 17:53:28

对于那些有兴趣,我发表了MAPI工具,我在我的博客在本地C源++创建。请享用。

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

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

如果使用赎回是一个选项(它支持几乎所有的语言,包括所有.NET语言),您可以使用RDOSession.AddressBook.SearchPath访问或操作通讯簿搜索路径顺序 - 请参阅http://www.dimastr.com/redemption/RDOAddressBookSearchPath.htm