2013-02-08 79 views
-1

我正在嘗試從,到和cc字段的電子郵件地址。有時這些是AD電子郵件,SMTP或分發電子郵件。如何爲Exhance用戶和通訊組列表獲取PrimarySmtpAddress

我發現有人在這裏遇到類似的問題,但他們沒有任何關於分配列表的信息。

我稍微修改了代碼以嘗試獲取此值。

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爲空,除非有讓收件人和調用顯示類型該對象後,一個小的延遲。

有沒有更好的方式來做到這一點?

我改變了代碼以下,但我有顧慮,這將不會對所有的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對象嗎?爲什麼不使用它? – 2013-02-08 23:42:19

+0

感謝您的幫助,我會嘗試先使用解決方案。你的其他問題是一個好讓我檢查.. – Josh 2013-02-09 00:34:21

+0

好吧,這就是我所做的。我在mailitem中遍歷每個收件人,然後使用recipient.AddressEntry.Address獲取電子郵件地址。最初的問題是這將爲交換用戶提供AD信息。所以我最終通過這個函數來解析上面的函數。現在我看它,我可以調用recipient.GetExchangeDistributionList()。PrimarySmtpAddress或.GetExchangeUser()。PrimarySmtpAddress或.Address根據需要。會很高興有一個屬性來獲得適當的smtp地址。 – Josh 2013-02-09 00:42:10

相關問題