phpメールアドレスが存在するか否かを判断する方法

3189 ワード

PHPはメールアドレスをチェックする方法が多くて、比較的によく使うのは自分で正則を書くことですが、正則は面倒で、私のPHPは方法を持って検査をしました.
filter_var
filter_varはPHP内蔵の変数フィルタリングの方法であり、整数、浮動小数点数、メールボックス、URL、MACアドレスなどを検証するために多くの実用的なフィルタを提供している.
具体的なフィルタの参考:filters.validate
filter_varがfalseを返すと、変数がフィルタを通過できないことを示します.つまり、合法ではありません.

$email = "[email protected]";
 
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
 
$email = "asb";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
$email = "[email protected]";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
 
  :
 
 
string(21) "[email protected]"
bool(false)
string(7) "[email protected]"

asbのような不正なメールボックスフォーマットではfalseが返されますが、[email protected]合格したら、やはり少し傷があるでしょう.
しかし、一般的な正則も通過すると[email protected]合法的なメールボックスですが、より正確に検証する方法はありませんか?
checkdnsrr
checkdnsrrは、指定したホストのDNSレコードをクエリーするために使用され、メールボックスが存在するかどうかを検証するために借りることができます.
について[email protected]レコードは存在しないに違いない.

$email = "[email protected]";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
  $email = "[email protected]";
  var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
 
    :
  bool(true)
  bool(false)

完璧で、唯一の欠点は遅すぎることです.結局、ネットワークリクエストをしなければなりません.そのため、大量のメールボックスを同期して検証するのに適していません.
filter_var+checkdnsrr
filterに接続できますvarとcheckdnsrrをチェックすると、ほとんどの不正なメールボックスがfilter_にあるに違いありません.varの時に切って、残りはまた使います
checkdnsrrはさらに判断する.

$email_arr = array("[email protected]", "[email protected]");
  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: [email protected]

ただし、MXの記録をチェックするだけなので、163と判断するしかない.comは存在するがlastchiliarchというユーザが存在するとは説明できない.
メールボックスの存在をより正確に判断するには、smtpサーバに接続して検証するしかありません.
以下、phpメールアドレスの正規表現を検証します.具体的な内容は以下の通りです.



"; $user_name = preg_replace( $pattern ,"$1", $email_address ); $domain_name = preg_replace( $pattern ,"$2", $email_address ); $reply .= " :".$user_name."

"; $reply .= " :".$domain_name."


"; } else { $reply = " "; } } ?>

メールアドレスを入力してください:
皆さんがこの文章が好きで、みんなに役に立つことを望んでいます.