如何解决私有域上批量邮件的套接字连接错误?

时间:2018-02-15 08:53:26

标签: c# .net email smtp

  

{"连接尝试失败,因为连接方没有   在一段时间后正确回应,或建立连接   失败,因为已连接的主机无法响应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 个答案:

答案 0 :(得分: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服务器管理员所需的参数。