Надежный способ получения адреса электронной почты отправителя с помощью Redemption

Я получаю адрес электронной почты отправителя в Outlook, используя RDOMail.SenderEmailAddress свойство, но я недавно понял, что в некоторых случаях для учетных записей электронной почты SMTP или IMAP, это свойство null иногда, сразу после того, как электронная почта прибывает в почтовый ящик.

Существует довольно запутанный способ получения адреса электронной почты отправителя с помощью библиотеки взаимодействия Outlook: https://msdn.microsoft.com/library/office/ff184624.aspx

Тем не менее, это не работает с выкупом RDOMail объект, потому что RDOAddressEntry интерфейсу не хватает AddressEntryUserType и GetExchangeUser метод.

Документация RDOAddressEntry объект говорит следующее о SMTPAddress имущество:

Строка, только для чтения. Возвращает SMTP-адрес данного пользователя. Если тип адреса "SMTP", возвращаемое значение совпадает с тем, которое возвращает свойство Address. Если типом адреса является "EX", Redemption пытается получить свойство PR_SMTP_ADDRESS, в случае неудачи извлекает SMTP-адрес по умолчанию из свойства расширенного MAPI PR_EMS_AB_PROXY_ADDRESSES.

Похоже, что это может быть более надежный способ получить адрес отправителя, если я сделаю это в моем методе:

if (rdoMail.SenderEmailAddress != null) return rdoMail.SenderEmailAddress;
if (rdoMail.Sender != null) return rdoMail.Sender.SMTPAddress;
return null;

Поскольку у меня нет надежного способа проверить свою теорию, я ищу здесь помощь, чтобы узнать, есть ли у кого-то больше опыта в решении этой проблемы.

Заранее спасибо.

1 ответ

Решение

Я не могу представить, почему SenderEmailAddress будет нулевым, если у вас нет частично загруженного элемента (специфично для IMAP4). Нет причин иметь AddressEntryUserType или же GetExchangeUser Метод - все, что вам нужно, это тип адреса - если это "EX", у вас есть пользователь GAL, в противном случае SMTP-адрес.

Чтобы получить SMTP-адрес отправителя, проверьте SenderEmailType имущество. Если это что-то, кроме "EX", просто используйте SenderEmailAddress имущество. Если это "EX", прочитайте PidTagSenderSmtpAddress использование имущества RDOMail.Fields["http://schemas.microsoft.com/mapi/proptag/0x5D01001F"], Если вы вернетесь null, проверьте, RDOMail.Sender не является нулевым и читать RDOMail.Sender.SMTPAddress имущество.

Другие вопросы по тегам