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

时间:2014-04-15 04:38:21

标签: c# php email smtp inbox

是否有API来检查远程服务器上是否存在电子邮件收件箱? my-addr.com做得很漂亮,并提出了一些关于盒子的惊人的高级信息。

  • john@gmail.com :“您尝试覆盖的电子邮件帐户超过了配额。请直接”
  • whatsup@gmail.com :“存在gsmtp /电子邮件”
  • asdfasdf19293949@gmail.com :“您尝试覆盖的电子邮件帐户不存在。”

我链接的工具将流程称为“反向电子邮件查询”,但搜索相同的工具会显示“从电子邮件地址中查找某人”和其他此类工具。

这是如何工作的?有没有办法直接从PHP或C#中执行此操作?

2 个答案:

答案 0 :(得分:3)

我认为你会发现很多时候这些功能对你来说是打败垃圾邮件发送者的。如果有一种方法来确认电子邮件是否真实,而不是让用户点击验证(或取消订阅......)链接,那么垃圾邮件发送者会一直使用它

验证电子邮件地址的最佳方法是向用户发送包含链接的电子邮件,并让他们点击该链接以验证他们是否收到了电子邮件。这就是说你唯一的选择是SMTP RCPT TO或VRFY命令。

RCPT TO可以是一种检查方式,只要您在发出后断开连接即可。但是,如果帐户不存在,并非所有服务器都会启动您

VRFY可以告诉您该服务器上是否存在帐户,但几乎总是被禁用以防止帐户探测。

执行RCPT TO验证的PHP类是:http://code.google.com/p/php-smtp-email-validation/

答案 1 :(得分:2)

我在my-addr.com's TOU中没有看到禁止以编程方式使用它的任何内容:因为您对网站的结果感到满意,您可以考虑(即在技术上,法律上和道德上权衡)使用my-addr.com本身就是一个“API”。

作为一个起点,这里是Fiddler Request to Code C#,用于我执行的快速邮箱存在检查:

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;
}