0

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>

What's wrong here ?

Ripon Uddin
  • 709
  • 3
  • 14
  • 29
  • Possible duplicate of [How to to send mail using gmail in Laravel 5.1?](https://stackoverflow.com/questions/32515245/how-to-to-send-mail-using-gmail-in-laravel-5-1) – miken32 Oct 12 '18 at 18:28
  • @miken32 sir every single configuration is correct . But somehow it's not working. I already face your reply link problem and i allowed less secure application at Gmail. – Ripon Uddin Oct 12 '18 at 18:36

0 Answers0