email @ domain是有效的电子邮件地址

时间:2010-09-13 20:40:18

标签: php validation email networking

我正在评估一堆电子邮件验证技术,其中有人输出该电子邮件@域是有效的。我在某处看到,如果这封电子邮件用于内部网络,那么这封电子邮件可能在技术上有效,但实际上对于今天网络上的几乎所有实际用途,此电子邮件都不应该评估为真。

您的电子邮件验证库或家庭烘焙方法有何功能,您是否允许这类事情?

4 个答案:

答案 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

您可能需要将其调整为

  • 放弃IP域
  • 丢弃端口号

要回答关于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';
}