$email = "lastchiliarch@163.com"; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));$email = "asb";var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); $email = "1@a.com";var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));输出:
string(21) "lastchiliarch@163.com"bool(false)string(7) 1@a.com对于asb这种非法邮箱格式返回了false, 但对于1@a.com则通过了,还是略有瑕疵啊。
$email = "lastchiliarch@163.com";var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));$email = "1@a.com";var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));输出:
bool(true)bool(false)可以看到, 很完美, 唯一的缺点就是太慢了, 毕竟是要做一次网络请求。 所以不适合同步对大量的邮箱采用这种做法去校验。
$email_arr = array("lastchiliarch@163.com", "1@a.com");foreach($email_arr as $email) {if (filter_var($email) === false) {echo "invalid email: $email
";continue;} if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) {echo "invalid email: $email
";continue;}} 输出:invalid email: 1@a.com但要注意的是, 由于只是检查MX记录, 所以只能判断163.com是存在的, 但不能说明lastchiliarch这个用户是存在的。
PHP Filters

Example #1 A filter_var() example
<?phpvar_dump(filter_var("bob@example.com", FILTER_VALIDATE_EMAIL));var_dump(filter_var("http://example.com", FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));?>以上例程会输出:
string(15) "bob@example.com"bool(false)