I wanted to verify Email Verification after Registration for my project.
Laravel Email not sending also not showing error after clone from Gitlab
After clone from gitlab i updated project composer and also added .env files.
I configured mail.php at config/mail.php
config/mail.php Configuration Below :
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'myEmail@gmail.com'),
'name' => env('MAIL_FROM_NAME', 'My Name'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MyEmail@gmail.com'),
'password' => env('MyPassword'),
i created verifyEmail for my project with this command :
php artisan make:mail verifyEmail
verifyEmail Configuration Below :
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
class VerifyEmail extends Mailable
{
use Queueable, SerializesModels;
public $user;
public function __construct(User $user)
{
return $this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('email.sendView');
}
}
Register Controller Code Below :
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Support\Str;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Mail;
use App\Mail\VerifyEmail;
class RegisterController extends Controller{
use RegistersUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest');
}
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'verifyToken'=>'string',
]);
}
protected function create(array $data){
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'verifyToken'=>Str::random(40),
]);
$thisUser = User::findOrFail($user->id);
$this->sendEmail($thisUser);
return $user;
}
/* Verification Email Send Start */
public function sendEmail($thisUser)
{
Mail::to($thisUser['email'])->send(new VerifyEmail($thisUser));
}
/* Verification Email Send End */
public function sendEmailDone($email,$verifyToken)
{
return $email." - ".$verifyToken;
}
public function verifyEmailFirst()
{
return view('email.verifyEmailFirst');
}
}
.env File Configuration
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=myEmail@gmail.com
MAIL_PASSWORD=myPassword
MAIL_ENCRYPTION=tls
After registration complete it will be redirect to a route
RegistersUsers file Configuration
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
return redirect()->route('verifyEmailFirst');
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
web.php Route Configuration code Below :
Route::get('/EmailVerification','Auth\RegisterController@verifyEmailFirst')-
>name('verifyEmailFirst');
Route::get('/verify/{email}/{verifyToken}','Auth\RegisterController@sendEmailDone')->name('sendEmailDone');
email.sendView view file Code Below :
<!DOCTYPE html>
<html lang="en">
<head>
<title>Email Verification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">
</script>
</head>
<body>
<div class="container">
<h2 class="well text-center">Email Verification Link Below</h2>
<a href="{{ route('sendEmailDone',["email"=>$user->email,"verifyToken"=>$user->verifyToken]) }}" class="btn btn-info btn-block" target="_blank">Verify Email Button</a>
</div>
</body>
</html>