2013-02-08 3 views
-1

Я пробую адрес электронной почты полей from, to и cc. Иногда это электронные письма электронной почты, SMTP или рассылки электронной почты.Как получить PrimarySmtpAddress для пользователей Exchance и списки рассылки

Я нашел человека, у которого была подобная проблема, но у них не было ничего о списках рассылки.

Я немного модифицировал код, чтобы попытаться получить это значение.

if (type.ToLower() == "ex") 
      { 
       recip = Globals.ThisAddIn.Application.GetNamespace("MAPI").CreateRecipient(address); 
       if (recip.DisplayType == OlDisplayType.olDistList) 
       { 
        sAddress = recip.AddressEntry.GetExchangeDistributionList().PrimarySmtpAddress; 
       } 
       else 
       { 
        sAddress = recip.AddressEntry.GetExchangeUser().PrimarySmtpAddress; 
       } 
      } 
      else 
      { 
       sAddress = address.Replace("'", ""); 
      } 

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

Есть ли лучший способ сделать это?

Я изменил код на следующем, но у меня есть опасения, что это не будет работать для всех DisplayTypes, и я даже не уверен, что большинство типов (варианты приведены здесь http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.oldisplaytype%28v=office.14%29.aspx)

private static string GetSmtpAddress(AddressEntry addressEntry) 
     { 
      string address; 
      if (addressEntry.Type == "ex") 
      { 
       if (addressEntry.DisplayType == OlDisplayType.olDistList) 
       { 
        address = addressEntry.GetExchangeDistributionList().PrimarySmtpAddress; 
       } 
       else 
       { 
        address = addressEntry.GetExchangeUser().PrimarySmtpAddress; 
       } 
      } 
      else 
      { 
       address = addressEntry.Address; 
      } 
      return address; 
     } 

ответ

1

Вам необходимо сначала решить проблему - после вызова CreateRecipient вызовите Recipient.Resolve.

+1

Кроме того, откуда берутся переменные типа и адреса? Они происходят из другого объекта AddressEntry? Почему бы не использовать его? –

+0

Спасибо за помощь. Сначала я попытаюсь использовать решение. Ваш другой вопрос хороший, позвольте мне проверить .. – Josh

+0

Хорошо, так это то, что я сделал. Я просматриваю каждого получателя в почтовом ящике, затем получаю адрес электронной почты с помощью адреса получателя.AddressEntry.Address. Первоначальная проблема заключалась в том, что у этого была бы информация AD для пользователей Exchange. Поэтому я закончил тем, что передал эту функцию выше, чтобы разобрать. Теперь, когда я смотрю на него, я могу просто вызвать recipient.GetExchangeDistributionList(). PrimarySmtpAddress или .GetExchangeUser(). PrimarySmtpAddress или .Address при необходимости. Было бы неплохо иметь одно свойство, чтобы получить соответствующий smtp-адрес. – Josh

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