Outlook Addin中的Recipient.Name和ExchangeUser.Name有什么区别?

时间:2019-01-15 22:45:55

标签: c# wpf outlook outlook-addin

有两个对象:

  1. Microsoft.Office.Interop.Outlook.Recipienthttps://docs.microsoft.com/en-us/office/vba/api/outlook.recipient.name
  2. Microsoft.Office.Interop.Outlook.ExchangeUserhttps://docs.microsoft.com/en-us/office/vba/api/outlook.exchangeuser.name

这两个实例的名称属性在我看来都是相同的,我可以使用RecipientExchangeUser转换为Recipient.AddressEntry.GetExchangeUser()。我使用哪个name属性有关系吗?两者之间有什么区别(与文档的写/读区别一样)。

2 个答案:

答案 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属性将反映新的收件人姓名。