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"); 

いつかログイン認証情報は、それが構成されていますどのように取引所/アクティブディレクトリに依存します。 これはuser @ domainまたはdomain \ userかもしれません

+0

こんにちは、チップのおかげで!それは素晴らしい作品です!私はEWS Api経由でEメールを送ることができます:)。 – GwenGuts

+0

私たちはローカルで 'domain \ username'として働いていましたが、外部ではドメインとユーザー名を分割する必要がありました。 – jtimperley

+0

シンプルだけど、このような指針がなくても何時間もかかりました。 24時間以内に修正されます。 ;) –

1

同じ問題の解決策を見つけるまでに多くの時間がかかりました。 私の場合、IISサイトの下のEWS仮想ディレクトリに許可されたURLのリストを追加する必要がありました。 IIS管理に移動し、既定のWebサイトの下のEWSノードをクリックし、要求フィルタをダブルクリックします。 [URL]タブに移動し、右側の[URLを許可]をクリックします。 サービスを呼び出すURLを入力します(例: example.com/ews/またはserver.example.com/ews/

さらに、同様の問題に関連して、すべてのホスト(*)をwinrmの信頼できるホストに追加する必要がありました(デフォルトではローカルIPリストされている)。

HTH。

関連する問題