Я разрабатываю добавление VSTO, которому необходимо прочитать весь адрес электронной почты при отправке нового сообщения. Ниже приведен код, который я использую сейчас, но он не работает в нескольких случаях.Получение адреса электронной почты от объекта получателя
if (addr.Type == "EX")
{
if (addr.AddressEntryUserType == OlAddressEntryUserType.olExchangeUserAddressEntry
|| addr.AddressEntryUserType == OlAddressEntryUserType.olExchangeRemoteUserAddressEntry)
{
exch = addr.GetExchangeUser();
smtpAddress = exch != null ? exch.PrimarySmtpAddress : null;
}
else if (addr.AddressEntryUserType == OlAddressEntryUserType.olOutlookContactAddressEntry)
{
cont = addr.GetContact();
//returns the actual contact but it has 3 email properties (Email1Address, Email2Address, Email3Address).
//How to identify which email has the user selected
}
}
else if (addr.Type == "SMTP")
{
smtpAddress = addr.Address;
}
Если AddressEntryUserType является olExchangeUserAddressEntry или olExchangeRemoteUserAddressEntry то код работает отлично. Но если это локальный контакт Outlook (olOutlookContactAddressEntry), я не уверен, как получить адрес электронной почты. Метод GetContact дает мне фактический контакт, но поскольку у него есть 3 письма, я не знаю, как определить, какой адрес выбрал пользователь при составлении электронной почты.
Я уже пробовал преобразовать адрес электронной почты Exchange в SMTP, как обсуждалось на этом форуме. Но это дает огромное влияние на производительность. Требуется около 300 мс для того, чтобы один addres был преобразован в SMTP. Есть ли другой эффективный способ идентификации адреса электронной почты из объекта Recepient?
В EntryID я получаю очень длинную строку, такую как «00000000FE42AA0A18C71A ................». Я действительно не знаю, как расшифровать это до шестнадцатеричных значений, указанных выше. – jokesrfunny
В этой шестнадцатеричной строке 2 символа представляют один байт: 00000000FE42AA0A18C71A = 0x00,0x00,0x00,0x00,0xFE, 0x42,0xAA, 0x0A, 0x18,0xC7,0x1A –