Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie reguläre PHP-Ausdrücke, um zu überprüfen, ob eine E-Mail-Adresse tatsächlich existiert

So verwenden Sie reguläre PHP-Ausdrücke, um zu überprüfen, ob eine E-Mail-Adresse tatsächlich existiert

PHPz
PHPzOriginal
2023-06-24 08:50:121392Durchsuche

Da E-Mails zu einem unverzichtbaren Bestandteil des täglichen Lebens moderner Menschen werden, wird es immer wichtiger, die Authentizität von E-Mail-Adressen zu überprüfen. Bei der Entwicklung von Webanwendungen können reguläre Ausdrücke verwendet werden, um die Gültigkeit von E-Mail-Adressen einfach zu überprüfen. Die Überprüfung der Authentizität einer E-Mail-Adresse erfordert jedoch ausgefeiltere Techniken. In diesem Artikel stellen wir vor, wie Sie reguläre PHP-Ausdrücke verwenden, um die Authentizität einer E-Mail-Adresse zu überprüfen.

Bevor wir beginnen, müssen wir wissen, was reguläre Ausdrücke sind. Ein regulärer Ausdruck ist ein Textmuster, das verwendet wird, um ein bestimmtes Zeichenfolgenmuster abzugleichen. In PHP können reguläre Ausdrücke mithilfe der Funktion preg_match() abgeglichen werden. Hier ist ein einfaches Beispiel:

$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.";
}

Im obigen Beispiel verwenden wir reguläre Ausdrücke, um zu überprüfen, ob eine E-Mail-Adresse gültig ist. Muster für reguläre Ausdrücke verwenden die RFC 2822-Spezifikation. Diese Spezifikation definiert das Format einer E-Mail-Adresse, zum Beispiel: Benutzername@Domänenname.com. Der obige reguläre Ausdruck verwendet Zeichensätze, sich wiederholende Metazeichen und Zeichenklassen, um qualifizierte E-Mail-Adressen abzugleichen. Wenn der Abgleich erfolgreich ist, wird die E-Mail-Adresse als gültige E-Mail-Adresse betrachtet.

Diese Überprüfungsmethode bestimmt jedoch nur, ob das Format der E-Mail-Adresse den Spezifikationen entspricht, und kann nicht die wahre Existenz der E-Mail-Adresse überprüfen. Um die tatsächliche Existenz der E-Mail-Adresse zu überprüfen, müssen wir mit dem E-Mail-Server interagieren.

Der Weg, diesen Prozess zu erreichen, besteht darin, eine E-Mail an den Mailserver zu senden und darauf zu warten, dass der Server eine Antwort zurückgibt. Wenn der Server eine Antwort zurückgibt, die besagt, dass die E-Mail-Adresse ungültig ist, wird die E-Mail-Adresse als ungültig betrachtet. Andernfalls gilt die E-Mail-Adresse als gültig. Dieser Prozess kann über die SMTP-Klasse von PHP durchgeführt werden.

Zuerst müssen wir über die SMTP-Klasse eine Verbindung mit dem Mailserver herstellen. Unten sehen Sie ein Beispiel für den Verbindungsaufbau zum Gmail-SMTP-Server:

$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");
}

Im obigen Beispiel haben wir den Gmail-SMTP-Server als Beispiel verwendet. Über die Funktion fsockopen() stellen wir eine Socket-Verbindung mit dem Mailserver her und senden über den EHLO-Befehl eine Kennung an den Server, die angibt, dass unser starttls-Befehl akzeptiert werden kann. Anschließend verwenden wir den Befehl STARTTLS, um die Socket-Verbindung zu verschlüsseln. Als nächstes senden wir den Befehl AUTH LOGIN an den Server und verwenden die Base64-Kodierung, um den Benutzernamen und das Passwort zur Authentifizierung an den Server zu senden.

Wenn die Authentifizierung erfolgreich ist, können wir mit dem Versenden von E-Mails an den Server beginnen. Hier ist ein Beispiel für die Überprüfung, ob die E-Mail-Adresse tatsächlich existiert:

$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.";
}

Im obigen Beispiel haben wir die Funktion fwrite() verwendet, um die Befehle MAIL FROM und RCPT TO an den Mailserver zu senden. Mit dem Befehl RCPT TO wird die wahre Existenz der Empfängeradresse überprüft. Wenn der vom Server zurückgegebene Antwortcode 250 oder 251 lautet, bedeutet dies, dass die E-Mail-Adresse gültig ist. Andernfalls gilt die E-Mail-Adresse als ungültig.

Mit der oben genannten Methode können wir eine Kombination aus regulären PHP-Ausdrücken und SMTP-Klassen verwenden, um die wahre Existenz der E-Mail-Adresse zu überprüfen. Obwohl diese Methode eine Interaktion mit dem Mailserver erfordert, sind ihre Überprüfungsergebnisse genauer und haben einen wichtigen praktischen Wert.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie reguläre PHP-Ausdrücke, um zu überprüfen, ob eine E-Mail-Adresse tatsächlich existiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn