使用 GetExchangeUser 获取 PrimarySMTP
Get PrimarySMTP using GetExchangeUser
在 Excel 版本 2201 中,使用 VBA,我想获取 PrimarySMTP 属性 我有显示名称的邮件用户列表。
我编写的代码在大多数情况下都有效:
Set myolApp = CreateObject("Outlook.Application")
Set myNameSpace = myolApp.GetNamespace("MAPI")
Set MyAddrList = myNameSpace.addressLists("Global Address List")
Set myAddrEntries = MyAddrList.AddressEntries(strDisplayname)
Set objExchUsr = myAddrEntries.GetExchangeUser
PrimarySMTP=objExchUsr.PrimarySMTPAddress
当显示名称有时有多个结果时,就会出现问题:GetExchangeUser
没有检索到正确人的 PrimarySMTP
。
我尝试将 UPN 而不是显示名称传递给 AddressEntries 函数,但没有成功。
Outlook 对象模型提供 NameSpace.CreateRecipient method which creates a Recipient 对象。它用于根据地址簿验证给定名称。收件人的姓名可以是表示收件人的显示名称、别名或完整 SMTP 电子邮件地址的字符串。
Sub ResolveName()
Dim myNamespace As Outlook.NameSpace
Dim myRecipient As Outlook.Recipient
Dim CalendarFolder As Outlook.Folder
Set myNamespace = Application.GetNamespace("MAPI")
Set myRecipient = myNamespace.CreateRecipient("Eugene Astafiev")
myRecipient.Resolve
If myRecipient.Resolved Then
Set objExchUsr = myRecipient.AddressEntry.GetExchangeUser()
PrimarySMTP = objExchUsr.PrimarySMTPAddress
Else
' you need to iterate over all entries in the AB
End If
End Sub
Outlook 对象模型没有为此提供任何其他功能。
如果收件人姓名不明确,Recipient.Resolve
将失败。
您无法使用 Outlook 对象模型解析不明确的名称 - 您可以遍历所有 GAL 条目,但这会太慢并且对于大型 GAL 容器会失败。
在扩展 MAPI(C++ 或 Delphi)中,您可以使用 PR_ANR
限制来获取所有匹配项(这是 Outlook 用来显示不明确条目列表的方法)。
如果可以使用 Redemption(我是作者),您可以使用 RDOSession.AddressBook.GAL.ResolveNameEx
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = myolApp.Session.MAPIOBJECT
set AdrrEntries = Session.AddressBook.GAL.ResolveNameEx(strDisplayname)
Debug.Print AdrrEntries.Count & " names were returned by ResolveNameEx:"
Debug.Print "------------"
for each AE in AdrrEntries
Debug.Print AE.Name
next
Debug.Print "------------"
在 Excel 版本 2201 中,使用 VBA,我想获取 PrimarySMTP 属性 我有显示名称的邮件用户列表。
我编写的代码在大多数情况下都有效:
Set myolApp = CreateObject("Outlook.Application")
Set myNameSpace = myolApp.GetNamespace("MAPI")
Set MyAddrList = myNameSpace.addressLists("Global Address List")
Set myAddrEntries = MyAddrList.AddressEntries(strDisplayname)
Set objExchUsr = myAddrEntries.GetExchangeUser
PrimarySMTP=objExchUsr.PrimarySMTPAddress
当显示名称有时有多个结果时,就会出现问题:GetExchangeUser
没有检索到正确人的 PrimarySMTP
。
我尝试将 UPN 而不是显示名称传递给 AddressEntries 函数,但没有成功。
Outlook 对象模型提供 NameSpace.CreateRecipient method which creates a Recipient 对象。它用于根据地址簿验证给定名称。收件人的姓名可以是表示收件人的显示名称、别名或完整 SMTP 电子邮件地址的字符串。
Sub ResolveName()
Dim myNamespace As Outlook.NameSpace
Dim myRecipient As Outlook.Recipient
Dim CalendarFolder As Outlook.Folder
Set myNamespace = Application.GetNamespace("MAPI")
Set myRecipient = myNamespace.CreateRecipient("Eugene Astafiev")
myRecipient.Resolve
If myRecipient.Resolved Then
Set objExchUsr = myRecipient.AddressEntry.GetExchangeUser()
PrimarySMTP = objExchUsr.PrimarySMTPAddress
Else
' you need to iterate over all entries in the AB
End If
End Sub
Outlook 对象模型没有为此提供任何其他功能。
如果收件人姓名不明确,Recipient.Resolve
将失败。
您无法使用 Outlook 对象模型解析不明确的名称 - 您可以遍历所有 GAL 条目,但这会太慢并且对于大型 GAL 容器会失败。
在扩展 MAPI(C++ 或 Delphi)中,您可以使用 PR_ANR
限制来获取所有匹配项(这是 Outlook 用来显示不明确条目列表的方法)。
如果可以使用 Redemption(我是作者),您可以使用 RDOSession.AddressBook.GAL.ResolveNameEx
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = myolApp.Session.MAPIOBJECT
set AdrrEntries = Session.AddressBook.GAL.ResolveNameEx(strDisplayname)
Debug.Print AdrrEntries.Count & " names were returned by ResolveNameEx:"
Debug.Print "------------"
for each AE in AdrrEntries
Debug.Print AE.Name
next
Debug.Print "------------"