2011-03-25 88 views
5

有無論如何ping通電子郵件地址或類似的東西來檢查它是一個真正的工作地址。我不是在談論正則表達式或PHP驗證過濾器等,但實際上檢查地址存在?ping來檢查真實的電子郵件地址

+7

發送電子郵件,並讓他們點擊一個鏈接以驗證?如果電子郵件地址不存在,那麼很多郵件服務器都沒有配置爲響應,即使是那樣的郵件服務器也不會總是發回錯誤。 – 2011-03-25 09:22:05

+0

你可以ping一臺服務器,而不是電子郵件地址。但即使你能ping通,也並不意味着電子郵件地址是真實的。 – usoban 2011-03-25 09:23:20

+3

可能重複[如何檢查電子郵件地址是否存在,而不發送電子郵件?](http://stackoverflow.com/questions/565504/how-to-check-if-an-email-address-exists-without-發送電子郵件) – 2011-03-25 09:28:07

回答

3

連接到收件人郵件服務器並提供郵件是可能的,但不可靠,提示郵件服務器拒絕或接受郵件。並非所有的郵件服務器都會檢查地址的有效性,所以不要依賴它。 類似的問題here

+1

除了缺乏可靠性之外,它還可能對性能和用戶體驗造成不良影響,因爲您必須打開一些與某些timout連接的套接字連接。 – 2011-03-25 09:50:42

1

你可以檢查,看看是否有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-檢查)吧...

+0

'filter_var($ email,FILTER_VALIDATE_EMAIL)'是什麼錯? – biakaveron 2011-03-25 10:05:36

+0

基本上是一樣的東西;) – Gekkie 2011-03-25 10:32:28

2

用於檢查主機名有用的功能存在(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; 
} 
+1

你對此有多自信? – MJoraid 2014-12-24 08:07:55