26

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

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

4

3 回答 3

40

尝试改变这个:

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

进入这个:

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

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

于 2012-11-22T17:22:49.787 回答
2

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

  1. 转到 IIS 管理,单击默认网站下的 EWS 节点,然后双击请求过滤。

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

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

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

于 2014-01-22T17:30:43.247 回答
0

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

exchangeService.Credentials = new WebCredentials("email", "app-pwd");
于 2018-07-05T07:47:06.313 回答