PHP 驗證 Email -檢查 DNS 的 MX 是否有通

驗證 Email 通常最簡單的就是判斷 '@', 要再準確一點, 就去判斷一下 DNS 的 MX 有沒有設囉~ 🙂

dig mx DOMAIN_NAME

這樣就可以列出 DOMAIN_NAME 的 MX 是設怎麼樣~

那 PHP 的程式要判斷 MX 有沒有設, 就用 checkdnsrr 的 function 來解決~

程式大概如下:

$email = '123@DOMAIN_NAME';
list(, $mailDomain) = split('@', $email); // 取出 DOMAIN_NAME
var_dump(checkdnsrr($mailDomain, 'MX')); // true => Email 是正確的, 反之則是 false.


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 Programming。將永久鏈結加入書籤。

PHP 驗證 Email -檢查 DNS 的 MX 是否有通 有 4 則回應

  1. hrf58 說道:

    請問windows下的php並無法使用 checkdnsrr函式,有其他解決的方法嗎?

  2. Tsung 說道:

    試用這個? (取自 php.net)
    if(!function_exists('checkdnsrr')){
    function checkdnsrr($host, $type=''){
    if(!empty($host)){
    $type = (empty($type)) ? 'MX' : $type;
    exec('nslookup -type='.$type.' '.escapeshellcmd($host), $result);
    $it = new ArrayIterator($result);
    foreach(new RegexIterator($it, '~^'.$host.'~', RegexIterator::GET_MATCH) as $result){
    if($result){
    return true;
    }
    }
    }
    return false;
    }
    }

  3. 初心者 說道:

    var_dump(checkdnsrr($mailDomain, 'MX')); // true => Email 是正確的
    請問這邊為什麼要加var_dump?

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料