处理未经授权使用 Exchange EWS 发送电子邮件的 401



我有以下代码使用 Exchange EWS 发送电子邮件。一切正常,直到提供不正确的用户名和密码并返回 401 未经授权的错误。 我将发送包装在 catch 语句中以处理错误。但是没有达成捕获声明。

public void SendExchangeEmail(EmailModel model, ApplicationUser adminUser) 
{
var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1)
{
Credentials = new WebCredentials(adminUser.Email, adminUser.ExchangePassword),
TraceEnabled = true,
TraceFlags = TraceFlags.All,
Url = new Uri("MyExchangeUrl")
};
var email = new EmailMessage(service);
email.ToRecipients.Add(model.recipient);
email.Subject = model.Subject;
email.Body = new MessageBody(model.Body);
try
{
email.Send();
}
catch (ServiceResponseException ex)
{
// This catch block is not reached when the incorrect username and password are supplied. 
}
}

捕获未经授权的错误的正确方法是什么。

您的异常处理不正确。"请求失败。远程服务器返回错误:(401( 未经授权。"错误引发服务请求异常。将代码修改为:

try
{
email.Send();
}
catch (ServiceRequestException ex)
{
//Exception handling
}

您需要与 Exchange 管理员联系,以允许服务帐户(AD 帐户(在 Outlook 应用程序之外发送电子邮件的权限(我忘记了角色/权限的具体名称(。

然后修改代码以使用以下代码:

ExchangeService
Service = new ExchangeService(ExchangeVersion.Exchange2013_SP1(; 服务。凭据 = new System.Net.NetworkCredential(serviceAccount.UserName, serviceAccount.Password(; 服务。ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userEmail(; 服务。AutodiscoverUrl(userEmail, RedirectionUrlValidationCallback(;

电子邮件用户的权限仅在Outlook应用程序中有效。如果在外部调用命令,则会阻止该命令,因此需要 Exchange 管理员知道的权限。

最新更新