Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan ungkapan biasa PHP untuk mengesahkan sama ada alamat e-mel benar-benar wujud

Cara menggunakan ungkapan biasa PHP untuk mengesahkan sama ada alamat e-mel benar-benar wujud

PHPz
PHPzasal
2023-06-24 08:50:121299semak imbas

Memandangkan e-mel menjadi bahagian yang amat diperlukan dalam kehidupan seharian orang moden, adalah semakin penting untuk mengesahkan ketulenan alamat e-mel. Apabila membangunkan aplikasi web, ungkapan biasa boleh digunakan untuk mengesahkan kesahihan alamat e-mel dengan mudah. Walau bagaimanapun, mengesahkan ketulenan alamat e-mel memerlukan teknik yang lebih canggih. Dalam artikel ini, kami akan memperkenalkan cara menggunakan ungkapan biasa PHP untuk mengesahkan ketulenan alamat e-mel.

Sebelum kita mula, kita perlu tahu apa itu ungkapan biasa. Ungkapan biasa ialah corak teks yang digunakan untuk memadankan corak rentetan tertentu. Dalam PHP, ungkapan biasa boleh dipadankan menggunakan fungsi preg_match(). Berikut ialah contoh mudah:

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

Dalam contoh di atas, kami menggunakan ungkapan biasa untuk mengesahkan sama ada alamat e-mel adalah sah. Corak ungkapan biasa menggunakan spesifikasi RFC 2822. Spesifikasi ini mentakrifkan format alamat e-mel, contohnya: nama pengguna@namadomain.com. Ungkapan biasa di atas menggunakan set aksara, metakarakter berulang dan kelas aksara untuk memadankan alamat e-mel yang layak. Jika perlawanan berjaya, alamat e-mel akan dianggap sebagai alamat e-mel yang sah.

Walau bagaimanapun, kaedah pengesahan ini hanya menentukan sama ada format alamat e-mel mematuhi spesifikasi dan tidak dapat mengesahkan kewujudan sebenar alamat e-mel tersebut. Untuk mengesahkan kewujudan sebenar alamat e-mel, kita perlu berinteraksi dengan pelayan e-mel.

Cara untuk mencapai proses ini adalah dengan menghantar e-mel ke pelayan mel dan menunggu pelayan membalas respons. Jika pelayan mengembalikan respons yang menunjukkan bahawa alamat e-mel itu tidak sah, maka alamat e-mel tersebut dianggap tidak sah. Jika tidak, alamat e-mel dianggap sah. Proses ini boleh dicapai melalui kelas SMTP PHP.

Pertama, kita perlu mewujudkan sambungan dengan pelayan mel melalui kelas SMTP. Berikut ialah contoh mewujudkan sambungan ke pelayan SMTP Gmail:

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

Dalam contoh di atas, kami menggunakan pelayan SMTP Gmail. Melalui fungsi fsockopen(), kami mewujudkan sambungan soket dengan pelayan mel dan menghantar pengecam ke pelayan melalui arahan EHLO, menunjukkan bahawa arahan starttls kami boleh diterima. Kami kemudian menggunakan arahan STARTTLS untuk menyulitkan sambungan soket. Seterusnya, kami menghantar arahan AUTH LOGIN ke pelayan dan menggunakan pengekodan base64 untuk menghantar nama pengguna dan kata laluan ke pelayan untuk pengesahan.

Jika pengesahan berjaya, kami boleh mula menghantar e-mel ke pelayan. Berikut ialah contoh menyemak sama ada alamat e-mel itu benar-benar wujud:

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

Dalam contoh di atas, kami menggunakan fungsi fwrite() untuk menghantar arahan MAIL FROM dan RCPT TO ke pelayan mel. Perintah RCPT TO digunakan untuk mengesahkan kewujudan sebenar alamat penerima. Jika kod respons yang dikembalikan oleh pelayan ialah 250 atau 251, ini bermakna alamat e-mel itu sah. Jika tidak, alamat e-mel dianggap tidak sah.

Melalui kaedah di atas, kami boleh menggunakan gabungan ungkapan biasa PHP dan kelas SMTP untuk mengesahkan kewujudan sebenar alamat e-mel tersebut. Walaupun kaedah ini memerlukan interaksi dengan pelayan mel, keputusan pengesahannya lebih tepat dan mempunyai nilai praktikal yang penting.

Atas ialah kandungan terperinci Cara menggunakan ungkapan biasa PHP untuk mengesahkan sama ada alamat e-mel benar-benar wujud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn