2010-09-13 168 views
2

我正在評估一堆電子郵件驗證技術,其中有人輸出該電子郵件@域有效。我從某個地方看到,如果這封電子郵件用於內部網絡,這個電子郵件在技術上可能是有效的,但對於今天網絡上的幾乎所有實際用途,這封電子郵件都不應評估爲真。電子郵件@域是一個有效的電子郵件地址

你的電子郵件驗證庫或自制方法是做什麼的,你允許這種事情嗎?

回答

2

那麼,這取決於應用程序應該做什麼。

它將在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)... 
} 

(注意,我說你可能做到這一點,如果你不應該。這將取決於你的具體使用案例)..

+0

您的DNS查找錯誤。根據規範,如果MX記錄不存在,則使用A記錄。因此,你必須同時尋找MX和A. – jmz 2010-09-14 06:40:48

+0

,那麼你可以利用短路並檢查'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

1

用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'; 
} 
2

.IO當前存在MX資源記錄的域名,所以是的,它是有效的。 RFC 5321明確允許。

歡迎您使用我的免費PHP函數is_email()來驗證地址。它可以下載here。例如,嘗試在線驗證http://isemail.info/[email protected]

它將確保地址完全符合RFC 5321。它還可以選擇性地檢查域是否實際存在並且有MX記錄。

你不應該依賴驗證告訴你用戶的電子郵件地址是否真實存在:一些ISP給了不符合規定的地址給他們的用戶,尤其是在不使用拉丁字母的國家。更多在我的文章關於電子郵件驗證在這裏:http://isemail.info/about

相關問題