使用 Exchange EWS 处理 401 未经授权发送电子邮件
Handling 401 unauthorised for send email using Exchange EWS
我有以下使用 Exchange EWS 发送电子邮件的代码。一切正常,直到提供了不正确的用户名和密码并返回 401 未经授权的错误。我将发送包裹在 catch 语句中以处理错误。但是没有达到 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.
}
}
捕获未授权错误的正确方法是什么。
您需要与您的 Exchange 管理员联系以允许服务帐户(AD 帐户)获得在 outlook 应用程序之外发送电子邮件的权限(我忘记了角色/权限的具体名称)。
然后修改您的代码以使用以下内容:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new System.Net.NetworkCredential(serviceAccount.UserName, serviceAccount.Password);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userEmail);
service.AutodiscoverUrl(userEmail, RedirectionUrlValidationCallback);
邮件用户的权限只在outlook应用程序内部有效。如果在外部调用该命令,它会被阻止,因此需要您的 Exchange 管理员知道的权限。
您的异常处理不正确。 "The request failed. The remote server returned an error: (401) Unauthorized. " 错误引发 ServiceRequestException。将您的代码修改为:
try
{
email.Send();
}
catch (ServiceRequestException ex)
{
//Exception handling
}
我有以下使用 Exchange EWS 发送电子邮件的代码。一切正常,直到提供了不正确的用户名和密码并返回 401 未经授权的错误。我将发送包裹在 catch 语句中以处理错误。但是没有达到 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.
}
}
捕获未授权错误的正确方法是什么。
您需要与您的 Exchange 管理员联系以允许服务帐户(AD 帐户)获得在 outlook 应用程序之外发送电子邮件的权限(我忘记了角色/权限的具体名称)。
然后修改您的代码以使用以下内容:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); service.Credentials = new System.Net.NetworkCredential(serviceAccount.UserName, serviceAccount.Password); service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userEmail); service.AutodiscoverUrl(userEmail, RedirectionUrlValidationCallback);
邮件用户的权限只在outlook应用程序内部有效。如果在外部调用该命令,它会被阻止,因此需要您的 Exchange 管理员知道的权限。
您的异常处理不正确。 "The request failed. The remote server returned an error: (401) Unauthorized. " 错误引发 ServiceRequestException。将您的代码修改为:
try
{
email.Send();
}
catch (ServiceRequestException ex)
{
//Exception handling
}