在解析 Outlook 收件人时选择多个条目的第一个条目



我有一个函数,它采用一个名称并在 Outlook 中解析它以返回所选名称的别名。当通讯簿中所选名称有多个条目时,此操作将失败。例如"Smith, Bob" 和 "Smith, Bob X"。如果我尝试解析的名称是"Smith, Bob X",则代码工作正常,但普通的"Smith, Bob"失败。

我假设当找到多个条目时,Outlook 会打开"检查名称"对话框(当我手动解析名称时会发生这种情况)。

当我的代码找到多个条目时,如何选择第一个条目?

Function GETTPX(ByVal UserName As String) As String
Dim objOL As Object
Dim oRecip As Outlook.Recipient
Dim oEU As Outlook.ExchangeUser
Dim oEDL As Outlook.ExchangeDistributionList
Set objOL = CreateObject("Outlook.Application")
Set oRecip = objOL.Session.CreateRecipient(UserName)
oRecip.Resolve
If oRecip.Resolved Then
    Set oEU = oRecip.AddressEntry.GetExchangeUser
End If
GETTPX = oEU.Alias
Set oRecip = Nothing
Set objOL = Nothing
End Function

在扩展 MAPI 级别(仅限 C++ 或 Delphi)上,可以对特定搜索容器(如 GAL)的内容表创建PR_ANR限制。这就是 Outlook 解析您在"收件人"编辑框中键入的名称时所做的 - 它会遍历搜索路径中的所有容器并应用PR_ANR限制。如果找到多个匹配项,则会显示一个包含列表的对话框。如果存在单个匹配项,则返回该匹配项并停止搜索,否则将继续到搜索路径中的下一个容器。

但是,Outlook 对象模型不会公开此功能。如果使用Redemption(我是它的作者 - 任何语言)是一个选项,它会公开RDOAddressBook。ResolveNameEx和RDOAddressList。ResolveNameEx ,返回匹配项列表。

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set AdrrEntries = Session.AddressBook.ResolveNameEx("john")
  Debug.Print AdrrEntries.Count & " names were returned by ResolveNameEx:"
  Debug.Print "------------"
  for each AE in AdrrEntries
    Debug.Print AE.Name
  next
  Debug.Print "------------"

最新更新