我的一位客戶抱怨說,與filter_var()
和期權FILTER_VALIDATE_EMAIL
的電子郵件地址,如:多久有TLD必須至少
[email protected]
被接受。所以我現在的問題是:頂級域名至少有多久?我的意思是我們知道.com
,.org
,.us
。但據我所知,TLD如.g
或.a
並不存在。
進一步的問題是:
- 難道他們甚至還存在?
- 它們是否已存在於現實世界(WWW)中?
- 有一天,某個「一個字符」頂級域名有可能存在於WWW中?
我的一位客戶抱怨說,與filter_var()
和期權FILTER_VALIDATE_EMAIL
的電子郵件地址,如:多久有TLD必須至少
[email protected]
被接受。所以我現在的問題是:頂級域名至少有多久?我的意思是我們知道.com
,.org
,.us
。但據我所知,TLD如.g
或.a
並不存在。
進一步的問題是:
我會做別的事情:檢查域是否可以解析,是否有MX記錄。如果沒有域名不能收到電子郵件,您可以拒絕該電子郵件地址。
還請檢查getmxrr()
函數,並且不要忘記也稱爲idn或punycode域的umlautdomains用於那個idn_to_ascii()
。下面是一個簡單的示例腳本:
$parts = explode('@', $email);
if(!getmxrr(idn_to_ascii($parts[1]))) {
echo 'Reject email address';
}
這是對這一切最具體和最乾淨的解決方案。 Thx爲您的答案。 – TiMESPLiNTER
爲避免實現可能無法反映所有有效域名的算法,您可以在域名上使用checkdnsrr函數。
喜歡的東西:
$parts = explode('@', $email);
$domain = $parts[1];
if (!checkdnsrr($domain)) {
echo 'Invalid domain';
}
Thx爲您的答案。我將建立一個方法'validateEmail($ email,$ checkDns = true){}',這樣我就可以開始DNS檢查,如果我永遠不需要的話。 – TiMESPLiNTER
請注意,這取決於您的DNS解析器的可用性,例如,如果DNS服務器或者intarwebs出現問題,可能會突然暫時拒絕電子郵件。儘管如此,仍是最佳解決方 – deceze
的TLD現在擁有至少2個字母。
您可以在可用的所有頂級域名列表中看到這一點。
來源:http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
由祕書科提供的解決方案是一個很好的解決方案,所以你應該使用!
'foo @ bar'也是一個有效的地址!如果我從我的位置發送給它,它可能無法解決,但它可能會在某些Intranet內部解決。 – deceze