2016-09-08 4 views
0

Я разрабатываю добавление 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?

ответ

0

Выбранный индекс встроен в идентификатор записи OAB - проверьте, что первые 20 байтов: 0x00,0x00,0x00,0x00,0xFE,0x42,0xAA,0x0A,0x18,0xC7,0x1A,0x10,0xE8,0x85,0x0B,0x65,0x1C,0x24,0x00,0x00 Байт 25 - тип (0x5 - DL, 0x4 - контакт). Байт 29 - индекс (только для контакта): 0 = адрес электронной почты1, 1 = адрес электронной почты2, 2 = адрес электронной почты3, 3 = бизнес-факс, 4 = домашний факс, 5 = другой факс.

+0

В EntryID я получаю очень длинную строку, такую ​​как «00000000FE42AA0A18C71A ................». Я действительно не знаю, как расшифровать это до шестнадцатеричных значений, указанных выше. – jokesrfunny

+0

В этой шестнадцатеричной строке 2 символа представляют один байт: 00000000FE42AA0A18C71A = 0x00,0x00,0x00,0x00,0xFE, 0x42,0xAA, 0x0A, 0x18,0xC7,0x1A –

Смежные вопросы