При отправке электронной почты через C#, Exchange и EWS Managed API выдает ошибку 407: Запрос не выполнен - ​​требуется проверка подлинности прокси. Почему? - PullRequest
2 голосов
/ 30 января 2020

Я пишу приложение Windows для форм на основе C# и EWS Managed API 2.2.0 (сборка Microsoft.Exchange.WebServices.dll) для клиента мой, который работает в компании.

Логика приложения c проста: мой клиент вводит свой адрес электронной почты "sender@ABC.domain.com" и адрес электронной почты получателя "recipient@contoso.com" и приложение отправляет получателю HTML электронное письмо.

Приложение должно подключиться к серверу Exchange компании моего клиента, аутентифицировать моего клиента для Обмен как пользователя домена Windows (с использованием аутентификации домена Windows) (клиент уже вошел в систему Windows со своим именем пользователя "отправитель" и как Windows пользователь делает запрос), а затем, send Электронная почта через его почтовый ящик "sender@ABC.domain.com".

Пока я написал приведенный выше код, который кажется правильным, но он выдает мне эту ошибку: "Запрос не выполнен. Удаленный сервер возвратил ошибку: (407). Требуется проверка подлинности прокси-сервера "

    try{

        //Initialize and bound 'service' to the latest known version of Exchange
        ExchangeService service = new ExchangeService();

        //Use the Windows logged-in user domain account credentials:
        //Is this correct / is this enough???
        service.UseDefaultCredentials = true;

        ServicePointManager.ServerCertificateValidationCallback = myValidationCallBackFunction;

        service.AutodiscoverUrl("sender@ABC.domain.com", myRedirectionCallback);
        MessageBox.Show("Autodiscover Exchange URL found:" + service.Url.ToString());

        //Impersonation test - just in case - but this is not make any difference in the error
        service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "sender@ABC.domain.com");

        //Initialize and set an EmailMessage
        EmailMessage message = new EmailMessage(service);
        message.Subject = "HelloWorld";

        string emailMessageBody = "<!DOCTYPE html><html> ... </html>";

        message.Body = new MessageBody(BodyType.HTML, emailMessageBody);
        email.ToRecipients.Add("recipient@contoso.com");

        message.SendAndSaveCopy();

        MessageBox.Show("E-Mail sent successfully");

    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }

Мой клиент использует Windows 10. Его P C является частью домена Windows с URL "XYZ.domain.com", а его имя пользователя на Windows - "отправитель". У него также есть приложение Outlook, установленное в его P C, которое прекрасно подключается к Exchange Server в сети его компании ...

Я полностью любитель Windows учетных записей / аутентификации домена. Это проблема Windows проверки подлинности домена? Это проблема с настройками соединения Exchange? Или проблема в моем коде в разделе аутентификации (нужно ли добавить что-то еще)?

1 Ответ

0 голосов
/ 08 февраля 2020

Я нашел часть решения самостоятельно!

Теперь мой код работает нормально.

Проблема была в настройках прокси в Windows 10 на P C моего клиента , По какой-то причине у него была включена ручная настройка прокси, но он этого не знал. Когда я его нашел и отключил, то электронное письмо было отправлено нормально.

Я говорю, что нашел "часть" решения, потому что:

1) Outlook 365 работает хорошо с локальным Exchange Server 2010, даже если у меня включены параметры прокси или нет. Но мое приложение работает только с отключенными настройками прокси. Кто-нибудь знает, как это объяснить? Почему Outlook прекрасно работает в обоих направлениях?

2) Если ИТ-служба компании моего клиента заставляет его всегда включать настройки прокси-сервера, как я могу обойти эту ошибку? Нужно ли как-то передавать учетные данные пользователя (с паролем или без него)? Если да, то как я могу сделать это с C#?

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