Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查是否存在电子邮件_Php_Email - Fatal编程技术网

Php 检查是否存在电子邮件

Php 检查是否存在电子邮件,php,email,Php,Email,我有一个问题,我有一个php脚本来检查电子邮件地址是否存在 但雅虎、hotmail、aol和其他提供商似乎正在接受任何电子邮件,而不是拒绝无效的电子邮件 只有Gmail和stackoverflow.com等许多域名拒绝接收无效电子邮件 检查我的脚本,让我知道我是否可以做一些检查雅虎和其他 html发布表单 <html> <body> <form action="checkemail.php" method="POST"> <b>E-mail<

我有一个问题,我有一个php脚本来检查电子邮件地址是否存在

但雅虎、hotmail、aol和其他提供商似乎正在接受任何电子邮件,而不是拒绝无效的电子邮件

只有Gmail和stackoverflow.com等许多域名拒绝接收无效电子邮件

检查我的脚本,让我知道我是否可以做一些检查雅虎和其他

html发布表单

<html>
<body>
<form action="checkemail.php" method="POST">
<b>E-mail</b> <input type="text" name="email">
<input type="submit">
</form>
</body>
</html>

电子邮件
php


如果您需要确保电子邮件地址存在,请向其发送电子邮件。它应该包含一个带有随机ID的链接。只有在单击该链接并包含正确的随机ID时,用户的帐户才会被激活(或发布广告,或发送订单,或您正在执行的任何操作)


这是唯一可靠的方法来验证电子邮件地址的存在,并确保填写表单的人可以访问它。

没有100%可靠的方法来检查电子邮件地址的有效性。不过,您至少可以做一些事情来清除明显无效的地址

电子邮件地址出现的问题实际上与蜗牛邮件非常相似。以下三点也可用于发送蜗牛邮件(只需使用物理地址更改DNS记录)

1。检查地址的格式是否正确

检查电子邮件地址的格式是非常困难的,但是PHP有一个方法可以尝试这样做。过滤器不处理“”,但我怀疑是否有人会注意到

if (filter_var($email, FILTER_VALIDATE_EMAIL) !== FALSE) {
    echo 'Valid email address formatting!';
}
2。检查域名的DNS记录是否存在

如果DNS(域名系统)记录存在,那么至少有人已经设置了它。这并不意味着该地址上有电子邮件服务器,但如果该地址存在,则更有可能

$domain = substr($email, strpos($email, '@') + 1);
if  (checkdnsrr($domain) !== FALSE) {
    echo 'Domain is valid!';
}
3。向地址发送验证电子邮件

这是查看电子邮件地址另一端是否有人的最有效方法。如果确认电子邮件没有以有序的方式响应(例如3小时),那么地址可能有问题。

您可以使用Telnet和MX验证“使用过的或真实的”电子邮件,MX会在中记录更多信息,因为PHP存在一个很好的库调用,可以简化此过程


使用example1.php文件创建一个布尔函数,并在验证电子邮件文本时调用它。对于Gmail、Hotmail、Outlook、live和MSM,我没有任何问题,但对于Yahoo和Terra,库无法正确验证电子邮件。问题是Gmail使用端口
25
发送smtp邮件,其他提供商使用不同的端口进行连接。对于
gmail.com
,您的回答似乎还可以

当您连接到gmail smtp时,它会给您
响应250 2.1.5 OK J5SI254284PBS.271-gsmtp


但是,当您连接到不使用端口25的任何其他smtp时,它会为您提供
null
响应。

这不是验证电子邮件地址的非常可靠的方法。许多服务器不会正确返回指示电子邮件是否存在的代码以防止垃圾邮件捕获。我认为许多提供商不会让你像这样测试电子邮件地址(因为有人可以使用同样的技术来挖掘垃圾邮件的有效电子邮件)。验证电子邮件地址的唯一真正方法是发送一封带有唯一令牌的电子邮件,并具有一种机制,允许用户将令牌输入到您的应用程序中,以确认他们收到了电子邮件。这在任何程度的可靠性下都不会起作用典型的流程是向该地址发送验证电子邮件,并且必须由用户执行通过按下电子邮件内的链接或输入一些代码进行验证;回复电子邮件是另一种选择。你不能。故事结束:(当然,我们都使用这些一次性地址,所以它只在很短的一段时间内有效。)time@Dagon,来自mailinator.com等服务的地址始终有效。它们可能不会一直被监视,但它们始终接受并显示传入的电子邮件。请尝试脚本。yahoo将对其生效12xyzabcdefg@yahoo.comyaho也是如此o用户我无法检查。好的,但我可以在这里检查域是否存在,很容易在浏览器中检查,并且检查格式是否正确对我来说不可靠。谢谢你需要修改你的代码。正如你目前所说,$domain将返回'@domain.com',这将导致检查失败。$domain=substr($email,strpos($email,@')+1);虽然效果很好。checkdnsrr非常简洁:)我知道这条评论很旧,但它不会起作用。截至2013年,它只适用于非常有限的提供商。任何人都不应该依赖它,也不应该在实时环境中使用它。
$domain = substr($email, strpos($email, '@') + 1);
if  (checkdnsrr($domain) !== FALSE) {
    echo 'Domain is valid!';
}