{“连接尝试失败,因为连接方在一段时间后没有正确响应,或者 Build 的连接失败,因为连接的主机无法响应72.167.238.32:25”}
public bool IsExists_SMTPMethod(string email)[socket connection error screenshot][1]
{
string domain = email.Substring(email.IndexOf("@") + 1);
var servers = _commander.GetMXServers(domain);
Socket socket = null;
foreach (MXServer mxserver in servers)
{
IPHostEntry ipHost = Dns.Resolve(mxserver.MailExchanger);
IPEndPoint endPoint = new IPEndPoint(ipHost.AddressList[0], 25);
socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(endPoint);
if (!CheckResponse(socket, ResponseEnum.ConnectSuccess))
{
socket.Close();
}
else
{
// If connected, send SMTP commands
{
SendData(socket, string.Format("HELO {0}\r\n", "machinename"));
if (!CheckResponse(socket, ResponseEnum.GenericSuccess))
{
socket.Close();
continue;
}
SendData(socket, string.Format("MAIL FROM: <{0}>\r\n", "from@domain.com"));
CheckResponse(socket, ResponseEnum.GenericSuccess);
SendData(socket, string.Format("RCPT TO: <{0}>\r\n", email));
bool result = CheckResponse(socket, ResponseEnum.GenericSuccess);
if (!result)
{
socket.Close();
continue;
}
else
return true;
}
}
}
return false;
}
1 回答
除非您知道SMTP服务器接受端口25上未经身份验证的连接,否则您的代码是非常有限的,但应该适用于私有SMTP服务器 . 尽管如此,即使您托管自己的SMTP服务器,但尝试在可靠的Internet地址上发送电子邮件,收件人的SMTP服务器也可能拒绝传入的电子邮件,因为您的SMTP服务器被视为不受信任 .
请查看您尝试定位的SMTP服务器的以下配置:
SMTP服务器是否仅接受明确注册的客户端IP地址?即使在私人领域,情况也是如此 .
允许25的SMTP?或者我需要使用SMTP SSL / SMTP TLS吗?
是SMTP服务器允许匿名连接?在互联网上避免垃圾邮件不再是这种情况 . 即使在私有域上,也可能需要身份验证 .
如果您使用自己的SMTP服务器但尝试将邮件传递到公共电子邮件地址,您的服务器是否正确设置为通过Internet发送电子邮件? (MX,反向DNS,SPF ......)
SMTP服务器可能有很多理由拒绝连接 . 但是,如果这是在私有域上,请检查SMTP服务器配置或询问SMTP服务器管理员所需的参数 .