驗證 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.
請問windows下的php並無法使用 checkdnsrr函式,有其他解決的方法嗎?
試用這個? (取自 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;
}
}
var_dump(checkdnsrr($mailDomain, 'MX')); // true => Email 是正確的
請問這邊為什麼要加var_dump?
var_dump() 是要讓你看到這是回傳 true / flase 的型態~