我正在評估一堆電子郵件驗證技術,其中有人輸出該電子郵件@域有效。我從某個地方看到,如果這封電子郵件用於內部網絡,這個電子郵件在技術上可能是有效的,但對於今天網絡上的幾乎所有實際用途,這封電子郵件都不應評估爲真。電子郵件@域是一個有效的電子郵件地址
你的電子郵件驗證庫或自制方法是做什麼的,你允許這種事情嗎?
我正在評估一堆電子郵件驗證技術,其中有人輸出該電子郵件@域有效。我從某個地方看到,如果這封電子郵件用於內部網絡,這個電子郵件在技術上可能是有效的,但對於今天網絡上的幾乎所有實際用途,這封電子郵件都不應評估爲真。電子郵件@域是一個有效的電子郵件地址
你的電子郵件驗證庫或自制方法是做什麼的,你允許這種事情嗎?
那麼,這取決於應用程序應該做什麼。
它將在Intranet中使用嗎?如果是這樣,[email protected]
可能會很好。
如果不是,您可能需要明確要求fqdn,以便它們不能在您的域內部發送郵件([email protected]
等)。
它不應該是很難查域部分:
$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)...
}
(注意,我說你可能做到這一點,如果你不應該。這將取決於你的具體使用案例)..
看到這個article for a regex to match all valid email addresses:
您可能需要將其調整到
並回答您的有關電子郵件@域quetion,如果您不期待內部網電子郵件,也可以放棄這一點。
用false檢查不是最好的方法,re轉折值可以是空的數組,例如$ domain ='-onlinbe.de';
),而不是嘗試空(:http://us3.php.net/manual/en/function.empty.php
$ dnsMx = dns_get_record($域,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';
}
.IO當前存在MX資源記錄的域名,所以是的,它是有效的。 RFC 5321明確允許。
歡迎您使用我的免費PHP函數is_email()
來驗證地址。它可以下載here。例如,嘗試在線驗證http://isemail.info/[email protected]。
它將確保地址完全符合RFC 5321。它還可以選擇性地檢查域是否實際存在並且有MX記錄。
你不應該依賴驗證告訴你用戶的電子郵件地址是否真實存在:一些ISP給了不符合規定的地址給他們的用戶,尤其是在不使用拉丁字母的國家。更多在我的文章關於電子郵件驗證在這裏:http://isemail.info/about。
您的DNS查找錯誤。根據規範,如果MX記錄不存在,則使用A記錄。因此,你必須同時尋找MX和A. – jmz 2010-09-14 06:40:48
,那麼你可以利用短路並檢查'if(false === dns_get_record($ domain,DNS_MX)&& false === dns_get_record($ domain,DNS_A )){'...如果有MX記錄,它不會檢查A記錄。如果沒有MX,它會檢查A並根據結果確定是否存在無效的域...噢,而且我沒有意識到這一點...我以爲你必須有一個MX才能接收電子郵件(每天學習新的東西,謝謝@ jmz)... – ircmaxell 2010-09-14 13:08:45