Почему передача IP-адреса вместо имени домена в System :: Net :: Mail :: SmtpClient вызывает ошибку аутентификации? - PullRequest
3 голосов
/ 27 июля 2011

Я пытаюсь отправить электронное письмо из системы, которая пытается использовать как можно меньшую пропускную способность.С этой целью я кеширую DNS-запросы локально и пытаюсь отправить напрямую на IP-адрес вместо имени домена.

Это фрагмент, который отправляет мои данные.

String^ _EmailServer = "smtp.gmail.com";
String^ _LoginName = "me@gmail.com";
String^ _LoginPassword = "mypassword";

System::Net::Mail::SmtpClient ^_SmtpClient = gcnew System::Net::Mail::SmtpClient(_EmailServer);

System::Net::NetworkCredential ^_NetworkCredential = gcnew System::Net::NetworkCredential(_LoginName, _LoginPassword);
        _
_SmtpClient->DeliveryMethod = System::Net::Mail::SmtpDeliveryMethod::Network;
_SmtpClient->UseDefaultCredentials = false;
_SmtpClient->Credentials = _NetworkCredential;
_SmtpClient->EnableSsl = true;

_SmtpClient->Send(_MailMessage);

Теперь странная вещь заключается в том, что фрагмент работает, но если я сам выполню поиск DNS и заменим _EmailServer на IP-адрес, который я определил, приведенный выше код выдает System::Security::Authentication::AuthenticationException, который говорит The remote certificate is invalid according to the validation procedure.

Этопроисходит сбой, даже если я выполняю поиск и сразу пытаюсь отправить его, используя разрешенный IP-адрес.

1 Ответ

3 голосов
/ 27 июля 2011

Причина, по-видимому, заключается в том, что сертификат сервера выдается домену smtp.gmail.com, и когда он сравнивается с IP-адресом (который вы передаете), происходит сбой, поскольку сертификатный домен не совпадает с сервером переданный вами адрес, т.е. IP-адрес (вместо фактического имени сервера)

...