17

,當我嘗試使用EWS API發送電子郵件,我得到以下錯誤:(在message.Send();的Exchange Web服務API和401未授權異常

The request failed. The remote server returned an error: (401) Unauthorized.

我的代碼如下:

ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

//WebService Uri 
try 
{ 
    exchangeService.Url = new Uri("https://exchangeserver/ews/exchange.asmx"); 
} 
catch (Exception ex) 
{ 
    throw new Exception(string.Format("WebService Uri:" + ex)); 
} 

//Credentials 
try 
{ 
    exchangeService.Credentials = new WebCredentials("[email protected]", "pwd", "domain"); 
} 
catch (Exception ex) 
{ 
    throw new Exception(string.Format("Credentials:" + ex)); 
} 

//Send a mail 
try 
{ 
    EmailMessage message = new EmailMessage(exchangeService); 
    message.Subject = "Test"; 
    message.Body = "Test"; 
    message.ToRecipients.Add("[email protected]"); 
    message.Save(); 
    message.Send(); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 

我閱讀了本網站上關於此問題的其他帖子,但他們無法解決我的問題。

+1

你通過問這個問題拯救了我的職業生涯! – Chookoos

+0

我的榮幸:)! – GwenGuts

+0

在以前EWS連接正常工作但不起作用的情況下,它可能與密碼過期一樣簡單,需要更改。 – RenniePet

回答

29

嘗試修改此:

exchangeService.Credentials = new WebCredentials("[email protected]", "pwd", "domain"); 

到這一點:

exchangeService.Credentials = new WebCredentials("user", "pwd", "domain"); 

有時登錄憑據取決於它是如何交換/ Active Directory中配置。 它可能是user @ domain或domain \ user

+0

嗨,謝謝你的提示!它很棒!我現在可以通過EWS Api發送電子郵件:)。 – GwenGuts

+0

我們在本地工作的'域\用戶名',但外部我不得不拆分域和用戶名。 – jtimperley

+0

簡單但卻需要數小時才能找到沒有這樣的指導,所以這個答案值得比它得到的更多。將在24小時內修改。 ;) –

1

我花了很多時間爲相同問題找到解決方案。 就我而言,我需要在IIS站點下的EWS虛擬目錄中添加允許的URL列表。 轉到IIS管理,單擊默認網站下的EWS節點,然後雙擊請求篩選。 轉到URL選項卡,然後在右側單擊允許URL。 輸入您要調用服務的網址,例如example.com/ews/或server.example.com/ews/

此外,與類似問題有關,我需要將所有主機(*)添加到winrm可信主機(默認情況下它只有本地IP上市)。

HTH。