How to Forgot Password send Mail in PHP?

03-Apr-2023

.

Admin

How to Forgot Password send Mail in PHP?

Hello dev,

This is a short guide on How to Forgot Password send Mail in PHP?. we will help you to give example of Send Reset Password Link Email PHP. you can understand a concept of example of Send Forgot password by mail or message in PHP. This article goes in detailed on PHP Send Reset Password Link Email.

This article will give you a simple example of PHP Send Reset Password Link Email. We will use the simple example of Password Reset System Using PHP.

I will give you a simple example of Forgot Password Recovery (Reset) using PHP and MySQL.

So, let's see bellow solution:

connection.php


<?php

$servername = "localhost";

$username = "root";

$password = "";

$dbname = "login";

$conn = new mysqli($servername,$username,$password,$dbname);

if($conn->connect_error){

die ('connection faild:'.$conn->connect_error);

}

?>

create table

CREATE TABLE user (

fullName VARCHAR(50) NOT NULL,

username VARCHAR(255) NOT NULL,

email VARCHAR(255) NOT NULL,

password VARCHAR(50) NOT NULL,

resettoken VARCHAR(50) NOT NULL,

resettokenexp date() NOT NULL,

);

index.php

<?php

session_start();

require ('connection.php');

?>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>How to Forgot Password send Mail in PHP?</title>

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

</head>

<body>

<div class="container-fluid mt-3">

<div class="card" style="height:590px;">

<div class="card-header text-center">

<h3>How to Forgot Password send Mail in PHP? - Nicesnippets.com</h3>

</div>

<div class="card-body">

<nav class="navbar navbar-expand-lg navbar-light bg-light">

<a class="navbar-brand " href="#">Aatmaninfo</a>

<div class="collapse navbar-collapse" id="navbarSupportedContent">

<ul class="navbar-nav me-auto mb-2 mb-lg-0">

<li class="nav-item">

<a class="nav-link" href="#">Home</a>

</li>

<li class="nav-item">

<a class="nav-link" href="#">about us</a>

</li>

<li class="nav-item">

<a class="nav-link" href="#">contect us</a>

</li>

</ul>

</div>

<form class="justify-content-end">

<?php

if (isset($_SESSION['logged_in']) && $_SESSION['logged_in']==TRUE) {

echo $_SESSION['email']." - <a href='logout.php' class='btn btn-danger'>LOGOUT</a>";

}else{

echo "<button type='button' class='btn btn-success m-1' data-bs-toggle ='modal' data-bs-target='#loginModal'>Login</button>

<button type='button' class='btn btn-danger m-1' data-bs-toggle='modal' data-bs-target='#RegisterModal'>Register</button>";

}

?>

</form>

</nav>

<?php

if (isset($_SESSION['logged_in']) && $_SESSION['logged_in']==TRUE) {

echo "<h1 class='text-center mt-5 pt-5'>Welcom to this website</h1>";

}

?>

</div>

</div>

<div class="modal fade" id="loginModal">

<div class="modal-dialog">

<div class="modal-content">

<div class="modal-header">

<h3 class="modal-title" id="loginModalLabel">Login</h3>

<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>

</div>

<form action="registration.php" method="post">

<div class="modal-body">

<div class="mb-3">

<label>Email : </label>

<input type="text" name="email_username" class="form-control" placeholder="Email">

</div>

<div class="mb-3">

<label>Password : </label>

<input type="password" name="password" class="form-control" placeholder="Password">

</div>

<div class="text-end">

<a href="forgotPassword.php" class='btn m-1 text-primary' style="background:transparent;">Forgot Password ?</a>

</div>

<hr class="mt-0">

<div class="text-center">

<input type="submit" name="login" value="Login" class="btn btn-primary">

</div>

</div>

</form>

</div>

</div>

</div>

<div class="modal fade" id="RegisterModal">

<div class="modal-dialog">

<div class="modal-content">

<div class="modal-header">

<h3 class="modal-title" id="RegisterModalLabel">Register</h3>

<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>

</div>

<form action="registration.php" method="post">

<div class="modal-body">

<div class="mb-3">

<label>Full Name : </label>

<input type="text" name="fullName" class="form-control" placeholder="Full Name">

</div>

<div class="mb-3">

<label>User Name : </label>

<input type="text" name="username" class="form-control" placeholder="User Name">

</div>

<div class="mb-3">

<label>Email : </label>

<input type="email" name="email" class="form-control" placeholder="Email">

</div>

<div class="mb-3">

<label>Password : </label>

<input type="password" name="password" class="form-control" placeholder="Password">

</div>

</div>

<div class="modal-footer">

<input type="submit" name="register" value="Register" class="btn btn-primary">

<button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>

</div>

</form>

</div>

</div>

</div>

</div>

</body>

</html>

forgotPassword.php

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Forgot password</title>

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

</head>

<body>

<div class="container d-flex justify-content-center mt-5 pt-5">

<div class="card mt-5" style="width:500px">

<div class="card-header">

<h1 class="text-center">Forgot Password</h1>

</div>

<div class="card-body">

<form action="registration.php" method="post">

<div class="mt-4">

<label for="email">Email : </label>

<input type="email" name="email" class="form-control" placeholder="Enter Email">

</div>

<div class="mt-4 text-end">

<input type="submit" name="send-link" class="btn btn-primary">

<a href="index.php" class="btn btn-danger">Back</a>

</div>

</form>

</div>

</div>

</div>

</body>

</html>

NOTE

This is required; first of all open this link - PHPMailer Download this file and used in cod.

registration.php

<?php

require ('connection.php');

session_start();

use PHPMailer\PHPMailer\PHPMailer;

use PHPMailer\PHPMailer\SMTP;

use PHPMailer\PHPMailer\Exception;

function sendmail($email,$reset_token){

require ('PHPMailer-master/src/PHPMailer.php');

require ('PHPMailer-master/src/Exception.php');

require ('PHPMailer-master/src/SMTP.php');

$mail = new PHPMailer(true);

try {

$mail->isSMTP();

$mail->Host = 'smtp.gmail.com';

$mail->SMTPAuth = true;

$mail->Username = 'your email';

$mail->Password = 'your password';

$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;

$mail->Port = 465;

$mail->setFrom('your email');

$mail->addAddress($email);

$mail->isHTML(true);

$mail->Subject = 'Password Reset link form Aatmaninfo';

$mail->Body = "we got a request form you to reset Password! <br>Click the link bellow: <br>

<a href='http://localhost:8000/updatePassword.php?email=$email&reset_token=$reset_token'>reset password</a>";

$mail->send();

return true;

} catch (Exception $e) {

return false;

}

}

if (isset($_POST['login'])) {

$email_username =$_POST['email_username'];

$password_login =$_POST['password'];

$sql="SELECT * FROM users WHERE email = '$email_username' AND password = '$password_login'";

$result = $conn->query($sql);

if ($row = $result->fetch_assoc()) {

$_SESSION['logged_in']=TRUE;

$_SESSION['email']=$row['email'];

header('location:index.php');

}elseif($row['email'] === $email_username){

echo "

<script>

alert('register your email');

window.location.href='index.php'

</script>";

}else{

echo "

<script>

alert('Enter valid password');

window.location.href='index.php'

</script>";

}

}

if (isset($_POST['register'])) {

$fullName =$_POST['fullName'];

$username =$_POST['username'];

$email =$_POST['email'];

$password =$_POST['password'];

$user_exist_query="SELECT * FROM users WHERE email = '$email' ";

$result = $conn->query($user_exist_query);

if ($result) {

if ($result->num_rows > 0) {

$row = $result->fetch_assoc();

if ($row['email'] === $email) {

echo "

<script>

alert('Email Address Already Exists!');

window.location.href='index.php'

</script>";

}

}else{

$query ="INSERT INTO `users`(`fullName`, `username`, `email`, `password`) VALUES ('$fullName','$username','$email','$password')";

if ($conn->query($query)===TRUE) {

echo "

<script>

alert('Registration Successful.');

window.location.href='index.php'

</script>";

}else{

echo "

<script>

alert('something got wrong !!');

window.location.href='index.php'

</script>";

}

}

}else{

echo "

<script>

alert('query can not run');

window.location.href='index.php'

</script>";

}

}

if (isset($_POST['send-link'])) {

$email = $_POST['email'];

$sql="SELECT * FROM users WHERE email = '$email'";

$result = $conn->query($sql);

if ($result) {

if ($row = $result->fetch_assoc()) {

$reset_token=bin2hex(random_bytes(16));

date_default_timezone_set('Asia/kolkata');

$date = date("Y-m-d");

$sql = "UPDATE users SET resettoken ='$reset_token', resettokenexp = '$date' WHERE email = '$email'";

if (($conn->query($sql)===TRUE) && sendmail($email,$reset_token )===TRUE) {

echo "

<script>

alert('Password reset link send to mail.');

window.location.href='index.php'

</script>";

}else{

echo "

<script>

alert('Something got Wrong');

window.location.href='forgotPassword.php'

</script>";

}

}else{

echo "

<script>

alert('Email Address Not Found');

window.location.href='forgotPassword.php'

</script>";

}

}else{

echo "

<script>

alert('Server Down');

window.location.href='forgotPassword.php'

</script>";

}

}

?>

updatePassword.php

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Upadte Password</title>

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

</head>

<body>

<?php

require ('connection.php');

if (isset($_GET['email']) && isset($_GET['reset_token'])) {

date_default_timezone_set('Asia/kolkata');

$date = date("Y-m-d");

$email = $_GET['email'];

$reset_token = $_GET['reset_token'];

$sql="SELECT * FROM users WHERE email = '$email' AND resettoken = '$reset_token' AND resettokenexp = '$date'";

$result = $conn->query($sql);

if ($result) {

if ($result->num_rows == 1) {

echo '

<div class="container d-flex justify-content-center mt-5 pt-5">

<div class="card mt-5" style="width:500px">

<div class="card-header">

<h1 class="text-center">Creat New Password</h1>

</div>

<div class="card-body">

<form method="post">

<div class="mt-2">

<label for="Password">Password : </label>

<input type="password" name="Password" class="form-control" placeholder="Creat New Password">

<input type="hidden" name="email" class="form-control" value='.$email.'>

</div>

<div class="mt-4 text-end">

<input type="submit" name="update" value="update" class="btn btn-primary">

<a href="index.php" class="btn btn-danger">Back</a>

</div>

</form>

</div>

</div>

</div>';

}else{

echo "

<script>

alert('invelid or Expired link');

window.location.href='index.php'

</script>";

}

}

}else{

echo "

<script>

alert('server down!!');

window.location.href='index.php'

</script>";

}

if (isset($_POST['update'])) {

$pass = $_POST['Password'];

echo $pass;

$email = $_POST['email'];

echo $email;

$update = "UPDATE users SET password='$pass',resettoken='NULL',resettokenexp=NULL WHERE email = '$email'";

if ($conn->query($update)===TRUE) {

echo "

<script>

alert('New Password Created Successfully');

window.location.href='index.php'

</script>";

}else{

echo "Error: ".$sql."<br>".$conn->error;

echo "

<script>

alert('Password not updated');

window.location.href='index.php'

</script>";

}

}

?>

</body>

</html>

logout.php

<?php

session_start();

session_unset();

session_destroy();

header("location:index.php");

?>

Output:

Registration Page

Login page

Forgot password page

Email

Creat New password page

Home page

It will help you...

#PHP