正在提取Outlook收件人地址



我有两列,标题分别为To和Cc。

我需要从Outlook中提取收件人和抄送电子邮件地址,而不是姓名到Excel文件中。

Sub ExportOutlookInfo()
Dim o As Outlook.Application
Set o = New Outlook.Application
Dim ons As Outlook.Namespace
Set ons = o.GetNamespace("MAPI")
Dim omail As Outlook.MailItem
Set omail = o.CreateItem(olMailItem)
Dim i As Long
Dim olRecip As Outlook.Recipient
Dim olRecipAddress As String
Dim SENT_FLDR As MAPIFolder
Dim Items As Outlook.Items
Set SENT_FLDR = ons.GetDefaultFolder(olFolderSentMail)
Set Items = SENT_FLDR.Items
Dim recp As Outlook.Application
For i = Items.Count To 1 Step -1
DoEvents
For Each olRecip In Items(i).Recipients
Debug.Print olRecip.Address
Next olRecip
Next i
End Sub

使用MailItem类的Recipients属性来获取收件人电子邮件地址。"使用Outlook收件人和收件人"集合–开发人员指南文章解释了如何处理收件人。如果你需要获得收件人的电子邮件地址,你可以使用以下通话顺序:

Recipient.AddressEntry.Address

AddressEntry类的Address属性返回一个表示AddressEntry的电子邮件地址的字符串。

此外,您还可以找到AddressEntry类的GetExchangeUser方法,如果AddressEntry属于ExchangeAddressList对象(如全局地址列表(GAL))并对应于Exchange用户,则该方法返回表示AddressEntry的ExchangeUser对象。ExchangeUser类提供了PrimarySmtpAddress属性,我想您正在查找该属性。阅读HowTo:将基于Exchange的电子邮件地址转换为SMTP电子邮件地址文章中有关转换电子邮件地址的更多信息。

还有另一种获取收件人SMTP地址的方法。下面的GetSMTPAddressForRecipients方法将MailItem作为输入参数,然后显示该邮件项目的每个收件人的SMTP地址。该方法首先检索Recipients集合,该集合表示为邮件项目指定的一组收件人。然后,对于该Recipients集合中的每个Recipient,该方法获取与该Recipient对象相对应的PropertyAccessor对象,并使用PropertyAccessor获取映射到收件人SMTP地址的MAPI属性https://schemas.microsoft.com/mapi/proptag/0x39FE001E的值。

Sub GetSMTPAddressForRecipients(mail As Outlook.MailItem) 
Dim recips As Outlook.Recipients 
Dim recip As Outlook.Recipient 
Dim pa As Outlook.PropertyAccessor 
Const PR_SMTP_ADDRESS As String = _ 
"http://schemas.microsoft.com/mapi/proptag/0x39FE001E" 
Set recips = mail.Recipients 
For Each recip In recips 
Set pa = recip.PropertyAccessor 
Debug.Print recip.name & " SMTP=" _ 
& pa.GetProperty(PR_SMTP_ADDRESS) 
Next 
End Sub

假设您正在访问ToCC属性(其中包含以;分隔的显示名称列表,这些列表可能包含也可能不包含电子邮件地址),则需要一次提取一个地址-在MailItem.Recipients集合中循环,然后对每个Recipient对象检查Recipient.Type属性(可以是olToolCColBCC)。然后可以读取Recipient.Address属性。

请注意,对于Exchange收件人(地址类型为"EX"而不是"SMTP"),您最终会得到EX地址。如果您总是想要SMTP地址,请使用Recipient.PropertyAccessor.GetProperty读取PR_ADDRTYPE(DASL名称"http://schemas.microsoft.com/mapi/proptag/0x3002001F")MAPI属性,检查您的地址类型是否正确。如果是";SMTP";,Recipient.Address属性就是您所需要的。如果是";EX";,尝试读取PR_SMTP_ADDRESSMAPI属性(DASL名称"http://schemas.microsoft.com/mapi/proptag/0x39FE001F")。如果它丢失了,您的最后手段将是Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress(价格昂贵,可能会引发错误)。

最新更新