如何检查远程服务器上的电子邮件收件箱是否存在

4
有没有API可以检查远程服务器上是否存在电子邮件收件箱?my-addr.com可以很好地完成这项工作,并提供一些令人惊讶的高级信息。
  • john@gmail.com:"您尝试联系的电子邮件帐户已超过配额。请直接"
  • whatsup@gmail.com:"gsmtp / 电子邮件存在"
  • asdfasdf19293949@gmail.com:"您尝试联系的电子邮件帐户不存在。"
我链接到的工具称该过程为“反向电子邮件查找”,但搜索相同内容会出现“从电子邮件地址查找人员”和其他类似的工具。
这是如何工作的?有没有办法直接使用PHP或C#完成这个任务?
2个回答

3
我认为你会发现,很多时候这些功能会欺骗你以打败垃圾邮件发送者。如果有一种方法可以确认电子邮件是否真实存在,而不是让用户点击验证(或取消订阅...)链接,那么垃圾邮件发送者将一直使用它。
验证电子邮件地址的最佳方法是向用户发送包含链接的电子邮件,并要求他们单击链接以验证收到电子邮件。也就是说,您唯一的选择是SMTP RCPT TO或VRFY命令。
RCPT TO可能是一种检查的方法,只要发出后立即断开连接。但是,并非所有服务器都会在帐户不存在时将您踢出。
VRFY可以告诉您该服务器上是否存在帐户,但几乎总是被禁用以防止帐户探测。
一个执行RCPT TO验证的PHP类是:http://code.google.com/p/php-smtp-email-validation/

2
我没有看到my-addr.com的条款中禁止程序化使用它:既然您对该网站的结果感到满意,您可以将my-addr.com本身视为“API”,并且需要考虑技术、法律和道德方面的问题。

作为起点,这是我进行的一个快速邮箱存在性检查的Fiddler C#代码:Request to Code

private void MakeRequests()
{
    HttpWebResponse response;

    if (Request_my_addr_com(out response))
    {
        response.Close();
    }
}

private bool Request_my_addr_com(out HttpWebResponse response)
{
    response = null;

    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://my-addr.com/email/?mail=baz%40gmail.com&x=0&y=0");

        request.KeepAlive = true;
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36";
        request.Referer = "http://my-addr.com/email/?mail=foo%40gmail.com&x=15&y=12";
        request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch");
        request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8");
        request.Headers.Set(HttpRequestHeader.Cookie, @"PHPSESSID=ne655jvfdte82b94gn0oumegj6");

        response = (HttpWebResponse)request.GetResponse();
    }
    catch (WebException e)
    {
        if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response;
        else return false;
    }
    catch (Exception)
    {
        if(response != null) response.Close();
        return false;
    }

    return true;
}

不错的尝试,但每天只有30个限制!!必须找到适当的方法来解决这个问题...或者付费批量检查...http://email-verify.my-addr.com/online-email-list-verification-tool.php - Robin Rodricks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接