有两个对象:
Microsoft.Office.Interop.Outlook.Recipient
(https://docs.microsoft.com/en-us/office/vba/api/outlook.recipient.name)Microsoft.Office.Interop.Outlook.ExchangeUser
(https://docs.microsoft.com/en-us/office/vba/api/outlook.exchangeuser.name)这两个实例的名称属性在我看来都是相同的,我可以使用Recipient
从ExchangeUser
转换为Recipient.AddressEntry.GetExchangeUser()
。我使用哪个name
属性有关系吗?两者之间有什么区别(与文档的写/读区别一样)。
答案 0 :(得分:2)
我不是Microsoft产品系列的专家。但是从名称上来说,Outlook是客户端,而Exchange是服务器。
也就是说,无论实际的邮件服务器是什么,您都可以使用收件人对象来引用Outlook客户端中的收件人,它可以是Exchange(视您的情况而定),也可以是Gmail,Yahoo!。邮件,mail.live.com,等等。
ExchangeUser对象专门用于Exchange邮箱用户,通常在企业中设置。因此,您可以找到收件人对象所不具备的详细属性,例如JobTitle和OfficeLocation(还有更多)。
此对象提供对适用于Exchange用户的属性(例如FirstName,JobTitle,LastName和OfficeLocation)的一流访问。
请注意,如果未连接到Exchange服务器,则不能使用Recipient.AddressEntry.GetExchangeUser()。
答案 1 :(得分:1)
收件人对象在邮件本身中作为收件人表中的一行存储。 Recipient.Name
对应于PR_DISPLAY_NAME
。
该行中的PR_ENTRYID
属性(如果解决了收件人,则显示该属性)指向通讯簿对象。这就是Recipient.AddressEntry
返回的内容-它使用收件人的PR_ENTRYID
呼叫IAddrBook::OpenEntry
。
从理论上讲,返回的AddressEntry.Name
可以与Recipient.Name
不同(一个来自通讯录对象,另一个来自PR_DISPLAY_NAME
)。 ExchangeUser
本质上是具有Exchange特定属性的AddressEntry
对象的扩展,因此ExchangeUser.Name
应该与AddressEntry.Name
相同。
您可以使用OutlookSpy查看此内容-选择一条消息,然后转到GetRecipientTable选项卡。右键单击PR_ENTRYID
属性,然后选择IMAPISession::OpenEntry
。您还可以将PR_DISPLAY_NAME
属性编辑为与GAL对象不同的内容。保存邮件时,邮件上的PR_DISPLAY_TO
属性将反映新的收件人姓名。