В чем разница между Recipient.Name и ExchangeUser.Name в надстройке Outlook? - PullRequest
0 голосов
/ 16 января 2019

Есть два объекта:

  1. Microsoft.Office.Interop.Outlook.Recipient (https://docs.microsoft.com/en-us/office/vba/api/outlook.recipient.name)
  2. Microsoft.Office.Interop.Outlook.ExchangeUser (https://docs.microsoft.com/en-us/office/vba/api/outlook.exchangeuser.name)

И у них обоих есть свойство name, которое в моем случае одинаково, и я могу конвертировать из Recipient в ExchangeUser, используя Recipient.AddressEntry.GetExchangeUser(). Имеет ли значение, какое свойство name я использую? И в чем разница между 2 (кроме отличий записи / чтения от документов).

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Объект получателя хранится внутри самого сообщения в виде строки в таблице получателей. Recipient.Name соответствует PR_DISPLAY_NAME. Свойство PR_ENTRYID в этой строке (присутствует, если получатель разрешен) указывает на объект адресной книги. Это то, что Recipient.AddressEntry возвращает - он использует PR_ENTRYID получателя для вызова IAddrBook::OpenEntry.

Возвращенное AddressEntry.Name теоретически может отличаться от Recipient.Name (одно происходит от объекта адресной книги, а другое от PR_DISPLAY_NAME в таблице получателей сообщения). ExchangeUser по сути является расширением объекта AddressEntry со специфическими свойствами Exchange, поэтому ExchangeUser.Name должно совпадать с AddressEntry.Name.

Вы можете увидеть это, используя OutlookSpy - выберите сообщение, перейдите на вкладку GetRecipientTable. Щелкните правой кнопкой мыши свойство PR_ENTRYID и выберите IMAPISession::OpenEntry. Вы также можете редактировать свойство PR_DISPLAY_NAME для чего-то отличного от объекта GAL. PR_DISPLAY_TO свойство сообщения будет отражать имя нового получателя при сохранении сообщения.

0 голосов
/ 16 января 2019

Я не эксперт по продуктовой линейке Microsoft. Но только по именам Outlook - это клиент, а Exchange - это сервер.

Другими словами, вы можете использовать объект Recipient для ссылки на адресата в вашем клиенте Outlook, независимо от того, каким является настоящий почтовый сервер, это может быть Exchange, как в вашем случае, или Gmail, Yahoo! Почта, mail.live.com, что угодно.

И объект ExchangeUser специально используется для пользователя почтового ящика Exchange, который обычно настраивается на предприятии. Таким образом, вы можете найти подробные свойства, такие как JobTitle и OfficeLocation (и многие другие), которых у объекта Recipient нет.

Этот объект обеспечивает первоклассный доступ к свойствам, применимым к пользователям Exchange, таким как FirstName, JobTitle, LastName и OfficeLocation.

Обратите внимание, что вы не можете использовать Recipient.AddressEntry.GetExchangeUser (), если вы не подключены к серверу Exchange.

...