首页 文章

Exchange Web Service API和401未经授权的例外

提问于
浏览
20

当我尝试使用EWS API发送电子邮件时,出现以下错误:(在 message.Send(); 中)

请求失败 . 远程服务器返回错误:(401)未经授权 .

我的代码如下:

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;
}

我在本网站上阅读了有关此问题的其他帖子,但他们无法解决我的问题 .

3 回答

  • 33

    尝试改变这个:

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

    进入这个:

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

    有时,登录凭据取决于它配置的Exchange / Active Directory的方式 . 它可以是user @ domain或domain \ user

  • 0

    我花了很多时间为同一个问题找到解决方案 . 就我而言,我需要在IIS站点下的EWS虚拟目录中添加允许的URL列表 . 转到IIS管理,单击“默认网站”下的“EWS”节点,然后双击“请求筛选” . 转到“URL”选项卡,然后在右侧单击“允许URL” . 输入您将通过其调用服务的网址,例如example.com/ews/或server.example.com/ews/

    此外,与类似问题相关,我需要将所有主机(*)添加到winrm可信主机(默认情况下,它只列出了本地IP) .

    HTH .

  • 1

    此问题可能导致Microsoft Office 365提供的双向身份验证 . 更好地创建应用程序密码并传递该密码而不是Outlook密码 .

    exchangeService.Credentials = new WebCredentials("email", "app-pwd");
    

相关问题