web-dev-qa-db-ja.com

Exchange Web Service APIおよび401不正な例外

EWS APIを使用してメールを送信しようとすると、次のエラーが表示されます:(message.Send();

要求は失敗しました。リモートサーバーがエラーを返しました:(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("user@domain", "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("destination@domain");
    message.Save();
    message.Send();
}
catch (Exception ex)
{
    throw ex;
}

この問題に関するこのサイトの他の投稿を読みましたが、私の問題を解決できませんでした。

25
GwenGuts

これを変更してみてください:

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

これに:

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

ログイン資格情報は、Exchange/Active Directoryの構成方法に依存する場合があります。 user @ domainまたはdomain\userの可能性があります

38
Carlos Landeras

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

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

HTH。

2
KirilStankov