当我尝试使用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;
}
我在本网站上阅读了有关此问题的其他帖子,但他们无法解决我的问题。
答案 0 :(得分:37)
尝试更改此内容:
exchangeService.Credentials = new WebCredentials("user@domain", "pwd", "domain");
进入这个:
exchangeService.Credentials = new WebCredentials("user", "pwd", "domain");
有时登录凭据取决于它配置的Exchange / Active Directory的方式。 它可以是user @ domain或domain \ user
答案 1 :(得分:2)
我花了很多时间为同一个问题找到解决方案。 就我而言,我需要在IIS站点下的EWS虚拟目录中添加允许的URL列表。 转到IIS管理,单击默认网站下的EWS节点,然后双击请求筛选。 转到“URL”选项卡,然后在右侧单击“允许URL”。 输入您将通过其调用服务的网址,例如example.com/ews/或server.example.com/ews /
此外,与类似问题相关,我需要将所有主机(*)添加到winrm可信主机(默认情况下,它只列出了本地IP)。
HTH。
答案 2 :(得分:-1)
此问题可能导致Microsoft Office 365提供两种方式的身份验证。更好地创建应用密码并将其(而不是Outlook密码)传递给该密码。
exchangeService.Credentials = new WebCredentials("email", "app-pwd");