Bei der E-Mail-Verifizierung wird sichergestellt, dass eine E-Mail-Adresse vorhanden ist und E-Mails empfangen kann. Bei der E-Mail-Validierung wird hingegen geprüft, ob die Adresse richtig formatiert ist. das heißt - geschrieben nach bestimmten Standards (z. B. UTF-8).
In diesem Artikel werde ich über die PHP-E-Mail-Verifizierung und deren Verwendung für die Webentwicklung und Benutzerauthentifizierung über ein Verifizierungstoken sprechen. Der Artikel enthält einige Mikro-Tutorials, darunter:
PHPMailer-Konfiguration mit Mailtrap
Eine einfache HTML-Formularerstellung
Grundlegende Überprüfung der E-Mail-Adresse
Tokens und Anmeldeinformationen in einer SQL-Datenbank generieren und speichern
E-Mail-Bestätigung mit einem Bestätigungstoken senden
E-Mail-Tests im Zusammenhang mit der Verifizierung
Also, lasst uns loslegen.
Um Bestätigungs-E-Mails zu senden, können Sie die in PHP integrierte Funktion mail() oder eine Bibliothek wie PHPMailer verwenden, die mehr Funktionen und eine höhere Zuverlässigkeit bietet.
Da ich das Tutorial so sicher und produktionsbereit wie möglich machen möchte, verwende ich „PHPMailer“. Überprüfen Sie den Code zur Installation von PHPMailer über Composer:
Komponisten benötigen phpmailer/phpmailer
Warum Mailtrap API/SMTP verwenden?
Es handelt sich um eine E-Mail-Zustellungsplattform, mit der Sie Ihre E-Mails an einem Ort testen, senden und steuern können. Und unter anderem erhalten Sie Folgendes:
Vorgefertigte Konfigurationseinstellungen für verschiedene Sprachen, inklusive PHP und Laravel.
SMTP und API mit SDKs in den wichtigsten Sprachen, einschließlich PHP.
Branchenbeste Analyse.
Menschliche Unterstützung rund um die Uhr und beschleunigtes Verfahren für dringende Fälle.
All das ermöglicht es Ihnen, den E-Mail-Verifizierungsprozess zu beschleunigen und ihn für alle sicher und stabil zu halten.
Weiter zu den Einstellungen zum Konfigurieren von PHPMailer mit Mailtrap:
$phpmailer = new PHPMailer(); $phpmailer->isSMTP(); $phpmailer->Host = 'live.smtp.mailtrap.io'; $phpmailer->SMTPAuth = true; $phpmailer->Port = 587; $phpmailer->Username = 'api'; $phpmailer->Password = 'YOUR_MAILTRAP_PASSWORD';
Hier ist das PHPMailer-Setup:
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; function sendVerificationEmail($email, $verificationCode) { $mail = new PHPMailer(true); try { // Server settings $mail->isSMTP(); $mail->Host = 'live.smtp.mailtrap.io'; $mail->SMTPAuth = true; $mail->Username = 'api'; $mail->Password = 'YOUR_MAILTRAP_PASSWORD'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; // Recipients $mail->setFrom('youremail@example.com', 'Your Website'); $mail->addAddress($email); // Content $mail->isHTML(false); $mail->Subject = 'Email Verification'; $mail->Body = "Your verification code is: $verificationCode"; $mail->send(); return true; } catch (Exception $e) { return false; } }
Beachten Sie, dass der obige Code das Verifizierungstoken nicht sendet (klicken Sie hier, um zum Codeausschnitt mit dem Verifizierungstoken zu springen). Es handelt sich lediglich um ein Beispiel für die Einrichtung von Mailtrap SMTP und die Definition der Verifizierungsfunktion. Hier ist eine kurze Aufschlüsselung der wichtigsten Punkte:
PHPMailer- und Exception-Klassen werden importiert.
sendVerificationEmail($email, $verificationCode) ist die Funktionsdefinition.
Ein neues PHPMailer-Objekt wird erstellt.
Der Try-Catch-Block behandelt Ausnahmen beim E-Mail-Versand.
Die Servereinstellungen sind gemäß der Beispielkonfiguration auf Mailtrap eingestellt.
Der E-Mail-Inhalt ist für Nur-Text auf isHTML(false) gesetzt.
Tipps:
Der E-Mail-Inhalt kann in HTML umgestaltet werden.
Aufgrund von Durchsatzbeschränkungen sollten Sie gmail.com nicht als SMTP-Relay für das Anmeldeformular verwenden. Wenn Sie jedoch wirklich eine Mailer-PHP-Datei erstellen und über Gmail versenden möchten, schauen Sie sich dieses Tutorial an.
Das Folgende ist ein einfaches Registrierungsformular, es enthält die Kopfzeile und Benutzerkontoinformationen (Benutzername, E-Mail und Passwort).
Es gibt kein CSS-Stylesheet oder eine Div-Klasse, da dies nur ein Beispiel ist.
Ich würde Ihnen jedoch raten, diese in die Produktion einzubeziehen und sie an der Designsprache Ihrer Marke auszurichten. Andernfalls sieht Ihr Formular möglicherweise unprofessionell aus und Benutzer würden sich nur ungern damit befassen.
<!DOCTYPE html> <html> <head> <title>Register</title> </head> <body> <form action="register.php" method="post"> <label>Username:</label> <input type="text" name="username" required> <br> <label>Email:</label> <input type="email" name="email" required> <br> <label>Password:</label> <input type="password" name="password" required> <br> <input type="submit" name="register" value="Register"> </form> </body> </html>
Bonus-Profi-Tipp: Erwägen Sie die Verwendung von JavaScript in Ihren Formularen
Wenn Sie eine vollständige Anleitung zum Erstellen eines PHP-Kontaktformulars mit reCaptcha wünschen, schauen Sie sich das Video unten an ⬇️.
JS kann Benutzereingaben in Echtzeit validieren und so sofortiges Feedback zu Fehlern geben, ohne dass die Seite neu geladen werden muss.
Durch das Erkennen von Fehlern auf der Clientseite kann JS die Anzahl ungültiger Anfragen reduzieren, die an den Server gesendet werden, wodurch die Serverlast reduziert und die Leistung für jede Sitzung verbessert wird.
Mit AJAX kann JS Daten vom Server senden und empfangen, ohne die Seite neu laden zu müssen, was für ein reibungsloseres Benutzererlebnis sorgt.
Jetzt gehe ich zur Bestätigung der E-Mail-Adresse über.
Hier ist ein einfaches Skript zum Überprüfen der Domain und des MX-Eintrags. Grundsätzlich können Sie E-Mails überprüfen, indem Sie eine MX-Suche durchführen.
<?php // This method checks if the domain part of the email address has a functioning mail server. $email = "user@example.com"; list($user, $domain) = explode(separator:"@", $email) if (filter_var($email, filter:FILTER_VALIDATE_EMAIL) && getmxrr($domain, &hosts: $mxhosts)){ echo "Valid email address with a valid mail server" . PHP_EOL; } else { echo "Invalid email address or no valid mail server found" . PHP_EOL; }
Das Skript sendet jedoch keine E-Mails zur Benutzeraktivierung und -authentifizierung. Außerdem speichert es keine Daten in MySQL.
Dafür werde ich in den nächsten Abschnitten Folgendes tun:
Generieren Sie ein Bestätigungstoken
Erstellen Sie ein PHP-MySQL-Schema, um die Anmeldeinformationen aus dem Registrierungsformular zu speichern
Send the verification email with the token
Verify the verification token
Tip: Similar logic can be applied to a logout/login form.
A verification token is a unique string generated for each user during registration. This token is included in the verification email and there are two methods to generate it.
Method 1
The first method leverages the bin2hex command to create a random token with the parameter set to (random_bytes(50)).
$token = bin2hex(random_bytes(50));
Method 2
Alternatively, you can generate the token with the script below. And I’ll be using that script in the email-sending script.
<?php function generateVerificationCode($length = 6) { $characters = '0123456789'; $code = ''; for ($i = 0; $i < $length; $i++) { $code .= $characters[rand(0, strlen($characters) - 1)]; } return $code; } ?>
Before sending the verification email, it’s vital to ensure you properly handle and store user data. I’ll use a simple SQL schema to create the users table and store the generated token in the database along with the user's registration information.
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, password VARCHAR(255) NOT NULL, token VARCHAR(255) DEFAULT NULL, is_verified TINYINT(1) DEFAULT 0 );
Quick breakdown:
The script above creates a users table with the following columns:
id - Unique identifier for each user, automatically incremented.
username - The user's username; it cannot be null.
email - The user's email address; it cannot be null.
password - The user's password (hashed); it cannot be null.
token - A verification token, which can be null.
is_verified - A flag indicating whether the user is verified (0 for not verified, 1 for verified), with a default value of 0.
Overall, the script below is amalgamation of everything previously discussed in the article and it’s designed to:
Generate a random numeric verification code.
Send the verification email to a specified email address using PHPMailer.
Configure the email server settings.
Handle potential errors.
Provide feedback on whether the email was successfully sent.
Note that the script is geared towards Mailtrap users and it leverages the SMTP method.
<?php require 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP use PHPMailer\PHPMailer\Exception; //Function to generate a random verification code 1 usage function generateVerificationCode($length = 6) { $characters = '0123456789'; $code = ''; for ($i = 0; $i < $length; $i++) { $code .= $characters[rand(0, strlen($characters) - 1)]; } return $code; } // Function to send a verification email using PHPMailer 1 usage function sendVerificationEmail($email, $verificationCode) { $mail = new PHPMailer (exception: true); try { // Server settings $mail ->SMTPDebug = SMTP::DEBUG_OFF; // Set to DEBUG_SERVER for debugging $mail ->isSMTP(); $mail ->Host = 'live.smtp.mailtrap.io'; // Mailtrap SMTP server host $mail ->SMTPAuth = true; $mail ->Username = 'api'; // Your Mailtrap SMTP username $mail ->Password = 'YOUR_MAILTRAP_PASSWORD'; // Your Mailtrap SMTP password $mail ->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption $email ->Port = 587; // TCP port to connect to //Recipients $mail->setFrom(address:'mailtrapclub@gmail.com', name:"John Doe"); //Sender's email and name $mail->addAddress($email); // Recipient's email //Content $mail->isHTML(isHTML:false); //Set to true if sending HTML email $mail->Subject = 'Email Verification'; $mail->Body = "Your verification code is: $verificationCode"; $mail->send(); return true; }catch (Exception $e) { return false; } } //Example usage $email = "mailtrapclub+test@gmail.com" $verificationCode = generateVerificationCode(); if (sendVerificationEmail($email,$verificationCode)){ echo "A verification email has been sent to $email. Please check your inbox and enter the code to verrify your email." . PHP_EOL; } else { echo "Failed to send the verification email. Please try again later." . PHP_EOL; }
Yeah, the title is a bit circular, but that’s exactly what you need. The script below enables the “verification of verification” flow ? that moves like this:
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "user_verification"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } if (isset($_GET['token'])) { $token = $_GET['token']; $stmt = $conn->prepare("SELECT * FROM users WHERE token=? LIMIT 1"); $stmt->bind_param("s", $token); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $user = $result->fetch_assoc(); $stmt->close(); $stmt = $conn->prepare("UPDATE users SET is_verified=1, token=NULL WHERE id=?"); $stmt->bind_param("i", $user['id']); if ($stmt->execute() === TRUE) { echo "Email verification successful!"; } else { echo "Error: " . $conn->error; } $stmt->close(); } else { echo "Invalid token!"; } } $conn->close(); ?>
We appreciate you chose this article to know more about php email verification. To continue reading the article and discover more articles on related topics, follow Mailrap Blog!
Das obige ist der detaillierte Inhalt vonSo richten Sie die E-Mail-Verifizierung in PHP über ein Verifizierungstoken ein: Vollständige Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!