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

C# 如何检查远程服务器上是否存在电子邮件收件箱,c#,php,email,smtp,inbox,C#,Php,Email,Smtp,Inbox,是否有API来检查远程服务器上是否存在电子邮件收件箱?这样做很漂亮,并带来了一些令人惊讶的关于一个盒子的高级信息 john@gmail.com:“您试图访问的电子邮件帐户超出了配额。请直接发送” whatsup@gmail.com:“gsmtp/电子邮件存在” asdfasdf19293949@gmail.com:“您试图访问的电子邮件帐户不存在。” 我链接的工具称这个过程为“反向电子邮件查找”,但搜索同样的过程会出现“从电子邮件地址查找某人”和其他类似的工具 这是怎么回事?有没有一种方法可

是否有API来检查远程服务器上是否存在电子邮件收件箱?这样做很漂亮,并带来了一些令人惊讶的关于一个盒子的高级信息

  • john@gmail.com:“您试图访问的电子邮件帐户超出了配额。请直接发送”
  • whatsup@gmail.com:“gsmtp/电子邮件存在”
  • asdfasdf19293949@gmail.com:“您试图访问的电子邮件帐户不存在。”
我链接的工具称这个过程为“反向电子邮件查找”,但搜索同样的过程会出现“从电子邮件地址查找某人”和其他类似的工具


这是怎么回事?有没有一种方法可以直接从PHP或C#实现这一点?

我想你会发现,很多时候,这些函数都会欺骗你来击败垃圾邮件发送者。如果有一种方法可以确认电子邮件是否真实,而不是让用户单击验证(或取消订阅…)链接,那么垃圾邮件发送者将一直使用它

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

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

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

一个进行RCPT验证的PHP类是:

< P>我没有看到任何禁止使用它的程序:因为您对站点的结果感到满意,所以可以使用My-ADDR.com本身作为“API”来考虑(即在技术上、法律上和伦理上权衡)。 首先,这里是Fiddler 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;
}

很好的尝试,但它有一个每天30的限制!!必须找到一个合适的方法来做这件事。。。或支付批量检查。。。