将显示名称映射到Email地址
本主题演示Visual Basic for Applications (VBA) 中的代码示例,该示例采用显示名称,并尝试将其映射到当前会话中消息系统已知的电子邮件地址。
对于每个 Outlook 会话,传输提供程序都会定义一组通讯簿容器,邮件系统可将邮件传送到这些容器中。 每个通讯簿容器与 Outlook 中的一个地址列表相对应。 如果在通讯簿容器集中定义了显示名称,则可以在当前会话中解析显示名称,并且地址列表中存在映射到此显示名称的条目。 请注意,地址列表中的条目可以有多种类型,包括 Exchange 用户和 Exchange 通讯组列表。
在此代码示例中,函数 ResolveDisplayNameToSMTP
使用显示名称“Dan Wilson”作为示例。 它首先尝试验证是否在地址列表中定义了显示名称,方法是基于此显示名称创建 Recipient 对象,然后调用 Recipient.Resolve。 如果名称已解析,则ResolveDisplayNameToSMTP
使用映射到 Recipient 对象的 AddressEntry 对象进一步获取类型以及电子邮件地址(如果可能):
如果 AddressEntry 对象的类型是 Exchange 用户,
ResolveDisplayNameToSMTP
会调用 AddressEntry.GetExchangeUser 以获取对应的 ExchangeUser 对象。 ExchangeUser.PrimarySmtpAddress 提供映射到显示名称的电子邮件地址。如果 AddressEntry 对象是 Exchange 通讯组列表,
ResolveDisplayNameToSMTP
会调用 AddressEntry.GetExchangeDistributionList 以获取 ExchangeDistributionList 对象。 ExchangeDistributionList.PrimarySmtpAddress 提供映射到显示名称的电子邮件地址。
Sub ResolveDisplayNameToSMTP()
Dim oRecip As Outlook.Recipient
Dim oEU As Outlook.ExchangeUser
Dim oEDL As Outlook.ExchangeDistributionList
Set oRecip = Application.Session.CreateRecipient("Dan Wilson")
oRecip.Resolve
If oRecip.Resolved Then
Select Case oRecip.AddressEntry.AddressEntryUserType
Case OlAddressEntryUserType.olExchangeUserAddressEntry
Set oEU = oRecip.AddressEntry.GetExchangeUser
If Not (oEU Is Nothing) Then
Debug.Print oEU.PrimarySmtpAddress
End If
Case OlAddressEntryUserType.olExchangeDistributionListAddressEntry
Set oEDL = oRecip.AddressEntry.GetExchangeDistributionList
If Not (oEDL Is Nothing) Then
Debug.Print oEDL.PrimarySmtpAddress
End If
End Select
End If
End Sub
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。