Обработка 401 несанкционированных для отправки электронной почты с использованием Exchange EWS - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть следующий код, который отправляет электронные письма с использованием Exchange EWS. Все работает нормально, пока не будут введены неправильные имя пользователя и пароль и не будет возвращена несанкционированная ошибка 401. Я обернул send в операторе 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. 
    }
}

Как правильно отловить несанкционированную ошибку.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Ваша обработка исключений неверна.«Запрос не выполнен. Удаленный сервер возвратил ошибку: (401) Unauthorized.» Ошибка выдает исключение ServiceRequestException.Измените свой код как:

try
{
    email.Send();
}
catch (ServiceRequestException ex)
{
    //Exception handling
}
0 голосов
/ 06 сентября 2018

Вам нужно поговорить с администратором 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...