.net 为什么将IP地址而不是域名传递给System::Net::Mail::SmtpClient会导致它抛出身份验证错误?

.net 为什么将IP地址而不是域名传递给System::Net::Mail::SmtpClient会导致它抛出身份验证错误?,.net,c++-cli,dns,ip-address,lookup,.net,C++ Cli,Dns,Ip Address,Lookup,我试图从一个尽可能少使用带宽的系统发送电子邮件。为此,我一直在本地缓存DNS查找,并尝试直接发送到IP地址而不是域名 这是发送我的数据的代码段 String^ _EmailServer = "smtp.gmail.com"; String^ _LoginName = "me@gmail.com"; String^ _LoginPassword = "mypassword"; System::Net::Mail::SmtpClient ^_SmtpClient = gcnew System::N

我试图从一个尽可能少使用带宽的系统发送电子邮件。为此,我一直在本地缓存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查找并将
\u EmailServer
更改为我解析的IP地址,上面的代码会抛出一个
System::Security::Authentication::AuthenticationException
,它表示
根据验证过程,远程证书无效


即使我执行查找并立即尝试使用我解析的IP地址发送,此操作也会失败。

原因似乎是服务器证书已颁发给域smtp.gmail.com,并且与IP地址(您传入的)进行了比较它失败了,因为证书域与您传递的服务器地址不匹配,即IP地址(而不是实际的服务器名称)

好吧,您正在尝试使用SSL,但本地端(现在)不知道您连接的是哪个域名;证书服务器名称与IP地址不匹配。谢谢;我没有意识到域名是证书的一部分。