繁体   English   中英

Exchange Web Service API 和 401 未授权异常

[英]Exchange Web Service API and 401 unauthorized exception

当我尝试使用 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;
}

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

尝试改变这个:

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

进入这个:

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

有时,登录凭据取决于 Exchange/Active Directory 的配置方式。

就我而言,我需要将允许的 URL 列表添加到 IIS 站点下的 EWS 虚拟目录。

  1. 进入 IIS 管理,点击 EWS 节点,在 Default Web Site 下,然后双击 Request Filtering。

  2. 转到 URL 选项卡,然后在右侧单击允许 URL。

  3. 输入您将用来调用服务的 URL,例如 example.com/ews/ 或 server.example.com/ews/

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM