我正在评估一堆电子邮件验证技术,其中有人输出该电子邮件@域是有效的。我在某处看到,如果这封电子邮件用于内部网络,那么这封电子邮件可能在技术上有效,但实际上对于今天网络上的几乎所有实际用途,此电子邮件都不应该评估为真。
您的电子邮件验证库或家庭烘焙方法有何功能,您是否允许这类事情?
答案 0 :(得分:2)
嗯,这取决于应用程序应该做什么。
是否会在内联网中使用?如果是这样,email@domain
可能没问题。
如果没有,您可能需要明确要求fqdn,以便他们无法在您的域内发送邮件(foo@localhost
等)。
检查域名部分应该不难:
$domain = array_pop(explode('@', $email));
然后,根据您的需要,验证域名。
您可以检查它的有效语法(它是一个fqdn)。网上有很多教程(很多框架提供)可以验证字符串中的域是否是fqdn格式...
或者,如果您的需求更大,您可以验证您的服务器是否可以解决它(通过类似dns_get_record()
...
if (false === dns_get_record($domain, DNS_MX)) {
//invalid domain (can't find an MX record)...
}
(注意,我说你可以这样做,如果你应该那就不行。这取决于你的具体用例)......
答案 1 :(得分:2)
域.io目前有一条MX资源记录,所以它是有效的。 RFC 5321明确允许它。
欢迎您使用我的免费PHP函数is_email()
来验证地址。可以下载here。例如,尝试在线验证http://isemail.info/jblue@io。
它将确保地址完全符合RFC 5321。它还可以选择检查域是否实际存在并具有MX记录。
您不应该依赖验证器来告诉您用户的电子邮件地址是否确实存在:某些ISP会向其用户提供不合规的地址,尤其是在不使用拉丁字母的国家/地区。更多关于电子邮件验证的文章:http://isemail.info/about。
答案 2 :(得分:1)
请参阅此article for a regex to match all valid email addresses:
您可能需要将其调整为
要回答关于email @ domain的问题,如果您不期待内联网电子邮件,也可以将其丢弃。
答案 3 :(得分:1)
使用false检查不是最好的方法,返回值可以是空数组,例如$ domain =' - onlinbe.de';
尝试使用empty()代替:http://us3.php.net/manual/en/function.empty.php
$ dnsMx = dns_get_record($ domain,DNS_MX); $ dnsA = dns_get_record($ domain,DNS_A);
if (empty($dnsMx) && empty($dnsA)) {
echo 'domain not available';
}
或使用
if(gethostbyname($domain) === $domain) {
echo 'no ip found';
}