0

我想检查是否存在某些电子邮件域。

Dns.GetHostEntry(domain)抛出异常时,我确定该域不存在。

  1. 我可以说如果Dns.GetHostEntry(domain)成功则域确实存在,或者即使Dns.GetHostEntry(domain)成功并不意味着(仍然)该域存在?
  2. 无法连接时我可以说同样的话s.Connect吗?我的意思是如果连接抛出异常,我可以说这样的域不存在吗?

如果 (1) 为真,那么为了检查域是否存在 (1) 就足够了,对吧?

public static bool Lookup(string domain)
{
    if (domain == null) throw new ArgumentNullException("domain");

    try {
       IPHostEntry ipHost = Dns.GetHostEntry(domain);
       var endPoint = new IPEndPoint(ipHost.AddressList[0], _dnsPort);

       return Transfer(endPoint);
    }
    catch (SocketException ex)
    {
          ++attempts;
    }
    return false;
}
public static bool Transfer(IPEndPoint endPoint)
{
    int attempts = 0;
    while(attempts <= _attempts)
    {                            
        try
        {
             var s = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
             s.Connect(endPoint);
        }
        catch (SocketException ex)
        {
            ++attempts;
        }
        finally
        {
            s.Close();
        }
    }
}
4

2 回答 2

2

尝试连接套接字时,您会说几件事:

  • 从我的机器到目标机器有一条网络路径
  • 网络路径没有防火墙和其他限制
  • 目标机器在目标端口上托管服务
  • 目标机器正在接受我在该目标服务上的连接

所有这些都发生主机名被解析为 IP 之后。

所以你的问题的答案是否定的。如果Socket.Connect失败,则可能是该域不存在,或上述任何原因(可能还有更多)。

于 2012-05-03T07:42:14.663 回答
0

经过一些研究,我发现根据 dns 检查mx 记录会告诉我域是否可以接收电子邮件。如果 DNS 服务器确实返回域的 mx 记录,则仅表示该域可以接收电子邮件。如果没有返回 mx 记录,则域无法接收电子邮件 == 该域不存在

于 2012-05-03T13:09:33.940 回答