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

bra*_*ess 6 php email verification

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

Bri*_*all 13

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

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

HTH

  • verifyemailaddress.org实际上并不起作用.它只是检查MX记录或我刚尝试搜索"dfdfasdfsdfasdf32432@hotmail.com"的东西告诉我它是有效的.去了hotmail并且该地址可用... (4认同)

Rob*_*itt 12

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

  • stackuser@stackoverflow.com

您希望按顺序执行的检查如下:

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

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

$is_valid = filter_var("stackuser@stackoverflow.com",FILTER_VALIDATE_EMAIL);
Run Code Online (Sandbox Code Playgroud)

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

$has_dns_mx_record = checkdnsrr("stackoverflow.com","MX");
Run Code Online (Sandbox Code Playgroud)

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

$socket = fsockopen("stackoverflow.com", 25);
$mail_running = (bool)$socket;
fclose($socket);
Run Code Online (Sandbox Code Playgroud)

您还可以检查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
Run Code Online (Sandbox Code Playgroud)

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

在这里查看一些响应代码:http://www.greenend.org.uk/rjk/2000/05/21/smtp-replies.html

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

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

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

  • 这有99%的工作机会.有些邮件服务器配置为永不返回550响应,因此脚本无法嗅出有效的电子邮件地址.我自己的电子邮件服务器配置如下.雅虎邮件也是如此. (4认同)