如何检查是否存在电子邮件ID?

时间:2011-01-12 00:30:59

标签: php email verification

如何使用PHP检查电子邮件ID是否存在?并获取有关电子邮件ID所有者的信息?是否可以获取有关电子邮件ID所有者的信息?必须使用POP等协议吗?请帮帮我。

2 个答案:

答案 0 :(得分:13)

在没有发送电子邮件并让用户以某种方式回复的情况下,没有100%保证知道电子邮件地址是否有效的方式。您可以执行检查以增加了解电子邮件地址是否有效的机会。您可以执行DNS查找并查看域是否具有MX记录。您还可以使用SMTP协议的一部分,但没有任何要求SMTP服务器将响应这些命令。 Centralops.net提供的产品可以提供帮助,但同样不能保证。

如果有一种确定的方法可以解决这个问题,那么为什么几乎所有具有注册功能的网站都要求您以某种方式回复电子邮件?这个问题并不意味着是一个讽刺的问题;我只是希望它可以帮助您看到其他网站无法执行您要求的相同检查。

HTH

答案 1 :(得分:12)

让我们说用户提交以下电子邮件地址:

  • stackuser@stackoverflow.com

您希望按顺序执行的检查是这样的:

  • 地址有效吗
  • 域是否运行邮件服务器/ MX记录
  • 是否列入黑名单

首先,在PHP中,您可以使用filter_var来验证电子邮件,如下所示:

$is_valid = filter_var("stackuser@stackoverflow.com",FILTER_VALIDATE_EMAIL);

其次你想检查域是否运行电子邮件服务器,为此你可以检查MX的dns记录,如下所示:

$has_dns_mx_record = checkdnsrr("stackoverflow.com","MX");

您可能还想打开域上的端口,如下所示:

$socket = fsockopen("stackoverflow.com", 25);
$mail_running = (bool)$socket;
fclose($socket);

您还可以检查SMTP服务器是否以550响应,即电子邮件不存在,如下所示:

SEND > helo hi
250 stackoverflow.com

SEND > mail from: <youremail@yoursite.com>
250 2.1.0 Ok

SEND > rcpt to: <stackuser@stackoverflow.com>
> 550 5.1.1 <stackuser@stackoverflow.com>: Recipient address rejected: User unknown in local recipient table

查看上述内容,您可以将命令发送到有效的smtp服务器,例如helo&gt; mail from <...>并检查550响应。

点击此处查看一些回复代码:http://www.greenend.org.uk/rjk/2000/05/21/smtp-replies.html

  

另外你应该注意@ slebetman的评论,说明一小部分邮件&gt;服务器配置为响应550以防止嗅探超出有效的电子邮件地址。

黑名单检查非常简单,您只需找到一个不错的DNSBL服务器,为您提供网关检查域名,看看它是否已被列入黑名单,如果它有电子邮件可能是有效和活跃但有被标记为垃圾邮件,因此它是不受信任的电子邮件,您应该请求另一个电子邮件地址进行授权

这些是用于验证电子邮件地址的一些验证技术,现在有更多的验证方法,但这些是主要的几种。

相关问题