ホームページ  >  記事  >  バックエンド開発  >  PHP 正規表現を使用して電子メール アドレスが実際に存在するかどうかを確認する方法

PHP 正規表現を使用して電子メール アドレスが実際に存在するかどうかを確認する方法

PHPz
PHPzオリジナル
2023-06-24 08:50:121377ブラウズ

電子メールが現代人の日常生活に欠かせないものになるにつれ、電子メール アドレスの信頼性を検証することがますます重要になっています。 Web アプリケーションを開発する場合、正規表現を使用して電子メール アドレスの有効性を簡単に検証できます。ただし、電子メール アドレスの信頼性を検証するには、より高度な技術が必要です。この記事では、PHP 正規表現を使用してメール アドレスの信頼性を検証する方法を紹介します。

始める前に、正規表現とは何かを知っておく必要があります。正規表現は、文字列の特定のパターンと一致するために使用されるテキスト パターンです。 PHP では、preg_match() 関数を使用して正規表現を照合できます。簡単な例を次に示します。

$email = "example@email.com";
$pattern = "/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}/";
if (preg_match($pattern, $email)) {
  echo "Valid email.";
} else {
  echo "Invalid email.";
}

上記の例では、正規表現を使用して電子メール アドレスが有効かどうかを確認します。正規表現パターンは RFC 2822 仕様を使用します。この仕様は、電子メール アドレスの形式を定義します (例: username@domainname.com)。上記の正規表現では、文字セット、繰り返しメタ文字、および文字クラスを使用して、修飾された電子メール アドレスと一致します。一致が成功した場合、その電子メール アドレスは有効な電子メール アドレスとみなされます。

ただし、この検証方法はメールアドレスの形式が仕様に準拠しているかどうかを判定するだけであり、メールアドレスの真の存在を検証するものではありません。電子メール アドレスが実際に存在することを確認するには、電子メール サーバーと対話する必要があります。

このプロセスを実装する方法は、メール サーバーに電子メールを送信し、サーバーからの応答が返されるのを待つことです。サーバーが電子メール アドレスが無効であることを示す応答を返した場合、その電子メール アドレスは無効であるとみなされます。それ以外の場合、電子メール アドレスは有効であるとみなされます。このプロセスは、PHP の SMTP クラスを通じて実行できます。

まず、SMTP クラスを介してメール サーバーとの接続を確立する必要があります。以下は、Gmail SMTP サーバーとの接続を確立する例です。

$host = "smtp.gmail.com";
$port = 587;
$username = "example@gmail.com";
$password = "password";

$socket = fsockopen($host, $port, $errno, $errstr, 10);
if (!is_resource($socket)) {
  die("$errstr ($errno)");
}

if (substr(fgets($socket, 1024), 0, 3) !== "220") {
  die("Failed to connect to $host:$port");
}

fwrite($socket, "EHLO example.com
");
if (substr(fgets($socket, 1024), 0, 3) !== "250") {
  die("Failed to send EHLO command");
}

fwrite($socket, "STARTTLS
");
if (substr(fgets($socket, 1024), 0, 3) !== "220") {
  die("Failed to initiate TLS");
}

stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);

fwrite($socket, "AUTH LOGIN
");
if (substr(fgets($socket, 1024), 0, 3) !== "334") {
  die("Failed to send AUTH LOGIN command");
}

fwrite($socket, base64_encode($username)."
");
if (substr(fgets($socket, 1024), 0, 3) !== "334") {
  die("Failed to send username");
}

fwrite($socket, base64_encode($password)."
");
if (substr(fgets($socket, 1024), 0, 3) !== "235") {
  die("Failed to authenticate");
}

上の例では、例として Gmail SMTP サーバーを使用しました。 fsockopen() 関数を通じてメール サーバーとのソケット接続を確立し、EHLO コマンドを通じてサーバーに識別子を送信し、starttls コマンドが受け入れられることを示します。次に、STARTTLS コマンドを使用してソケット接続を暗号化します。次に、AUTH LOGIN コマンドをサーバーに送信し、base64 エンコードを使用してユーザー名とパスワードを認証のためにサーバーに送信します。

認証に成功すると、サーバーへの電子メールの送信を開始できます。以下は、電子メール アドレスが実際に存在するかどうかを確認する例です。

$email = "example@email.com";
$host = "mx1.example.com";

fwrite($socket, "MAIL FROM:<me@example.com>
");
if (substr(fgets($socket, 1024), 0, 3) !== "250") {
  die("Failed to send MAIL FROM command");
}

fwrite($socket, "RCPT TO:<$email>
");
$response = substr(fgets($socket, 1024), 0, 3);
if ($response === "250" || $response === "251") {
  echo "Valid email.";
} else {
  echo "Invalid email.";
}

上記の例では、fwrite() 関数を使用して MAIL FROM および RCPT TO コマンドをメール サーバーに送信します。 RCPT TO コマンドは、受信者アドレスが実際に存在することを確認するために使用されます。サーバーから返された応答コードが 250 または 251 の場合、電子メール アドレスが有効であることを意味します。それ以外の場合、電子メール アドレスは無効であるとみなされます。

上記の方法により、PHP 正規表現と SMTP クラスを組み合わせて使用​​して、電子メール アドレスが実際に存在することを確認できます。この方法ではメール サーバーとの対話が必要ですが、その検証結果はより正確であり、重要な実用的価値があります。

以上がPHP 正規表現を使用して電子メール アドレスが実際に存在するかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。