有無論如何ping通電子郵件地址或類似的東西來檢查它是一個真正的工作地址。我不是在談論正則表達式或PHP驗證過濾器等,但實際上檢查地址存在?ping來檢查真實的電子郵件地址
回答
連接到收件人郵件服務器並提供郵件是可能的,但不可靠,提示郵件服務器拒絕或接受郵件。並非所有的郵件服務器都會檢查地址的有效性,所以不要依賴它。 類似的問題here。
除了缺乏可靠性之外,它還可能對性能和用戶體驗造成不良影響,因爲您必須打開一些與某些timout連接的套接字連接。 – 2011-03-25 09:50:42
你可以檢查,看看是否有MX記錄相應的域: getmxrr()http://php.net/manual/en/function.getmxrr.php
,但我會建議使用兩個部分驗證: - 第一個simple
正則表達式輸入 平原驗證 - 然後看到一個simple
檢查,如果頂級域爲有效
// pattern was taken from PHP's own source
$pattern = "/^((\\\"[^\\\"\\f\\n\\r\\t\\b]+\\\")|([A-Za-z0-9_][A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*(\\.[A-Za-z0-9_\\!\\#\\$\\%\\&\\'\\*\\+\\-\\~\\/\\^\\`\\|\\{\\}]*)*))@((\\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9])(([A-Za-z0-9\\-])*([A-Za-z0-9]))?(\\.(?=[A-Za-z0-9\\-]))?)+[A-Za-z]+))$/D";
if (preg_match($pattern, $email)) {
/**
* allow ip address as domain OR it should be a valid TLD
*/
$long = ip2long(substr($email, strrpos($email, '@')+1));
return (($long !==FALSE && $long>-1)
|| isValidTld(substr($email, strrpos($email, '.')+1)));
}
這仍然沒有garantee,它的作品,但除了發送電子郵件和捕捉可能的反彈......這是在t相當多(除他MX-檢查)吧...
'filter_var($ email,FILTER_VALIDATE_EMAIL)'是什麼錯? – biakaveron 2011-03-25 10:05:36
基本上是一樣的東西;) – Gekkie 2011-03-25 10:32:28
用於檢查主機名有用的功能存在(90%的工作):
function validate_email($email)
{
if(!preg_match ("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/", $email))
return false;
list($prefix, $domain) = explode("@",$email);
if(function_exists("getmxrr") && getmxrr($domain, $mxhosts))
return true;
elseif (@fsockopen($domain, 25, $errno, $errstr, 5))
return true;
else
return false;
}
你對此有多自信? – MJoraid 2014-12-24 08:07:55
- 1. 正則表達式來檢查電子郵件地址
- 2. 檢查垃圾郵件蜜罐的電子郵件地址
- 3. 使用谷歌搜索真實的電子郵件地址
- 4. punycode編碼的電子郵件地址與「真實」地址衝突嗎?
- 5. 沒有發送任何電子郵件我怎麼知道電子郵件地址是真實的和現有的電子郵件地址
- 6. BlackBerry查找電子郵件地址
- 7. 問卷調查電子郵件地址
- 8. 如何查看電子郵件地址?
- 9. 檢查電子郵件地址是否爲子域名
- 10. 我可以禁止ping電子郵件地址嗎?
- 11. 刮電子郵件地址
- 12. 在電子郵件地址
- 13. noreply電子郵件地址。
- 14. Rtrtr.com電子郵件地址
- 15. 從電子郵件地址
- 16. Django電子郵件地址
- 17. 在AngularJS項目中檢查電子郵件ID是否真實
- 18. 用MFMailComposeViewController檢查收件人電子郵件地址
- 19. 檢查電子郵件地址文件並提取它們
- 20. 檢查發件人電子郵件地址
- 21. 檢查重複電子郵件地址的觸發器
- 22. 檢查strpos的有效電子郵件地址(php)
- 23. 檢查電子郵件發送地址的腳本
- 24. 檢查電子郵件地址是系統獨有的
- 25. 檢查電子郵件地址是有效的System.Net.Mail.MailAddress
- 26. MySQL的電子郵件地址約束檢查
- 27. 檢查有效的電子郵件地址失敗
- 28. 檢查其他列表的電子郵件地址列表
- 29. 如何檢查電子郵件地址的目標C可可
- 30. 檢查有效的電子郵件地址
發送電子郵件,並讓他們點擊一個鏈接以驗證?如果電子郵件地址不存在,那麼很多郵件服務器都沒有配置爲響應,即使是那樣的郵件服務器也不會總是發回錯誤。 – 2011-03-25 09:22:05
你可以ping一臺服務器,而不是電子郵件地址。但即使你能ping通,也並不意味着電子郵件地址是真實的。 – usoban 2011-03-25 09:23:20
可能重複[如何檢查電子郵件地址是否存在,而不發送電子郵件?](http://stackoverflow.com/questions/565504/how-to-check-if-an-email-address-exists-without-發送電子郵件) – 2011-03-25 09:28:07