Hoy aprenderemos a registrar y confirmar el correo de nuestros usuarios en Laravel.
Antes de empezar debemos tener una aplicación laravel creada y una aplicación angular. El flujo común de correo de confirmación es el siguiente:

Dado el flujo anterior, ahora realizaremos la secuencia:

Para el ejemplo siguiente usaremos Google como nuestro servidor de correos.
Configurando Google
Vamos a nuestra cuenta de Google y a configuracion, nos aseguramos que en Seguridad tengamos la verificación de 2 pasos activada y, además agregaremos una contraseña para nuestra aplicación (ojo que se utilizará para más adelante).

Crea una contraseña para aplicaciones
Buscamos app en nuestra cuenta de google y seleccionamos Accede con contraseñas de aplicaciones.

Y creamos una contraseña que luego utilizaremos en nuestro archivo .env
Habilitar POP/IMAP
El siguiente paso es decirle a Google que queremos habilitar las funciones IMAP y POP de nuestro correo, para ello vamos a nuestro correo GMAIL y en configuración:

Configurando Laravel
Creamos nuestra aplicación Laravel la cual nombraremos verification-email
composer create-project laravel/laravel verification-email
Para verificar la correcta instalación corremos la siguiente instrucción dentro de la carpeta del proyecto (verification-email):
php artisan serv
la aplicación Laravel debería levantar sin problemas
Hecho lo anterior configuramos nuestro archivo de propiedades .env que se encuentra en la raíz de nuestro proyecto Laravel.
Conectamos nuestra aplicación a nuestra base de mysql. En este caso supondremos que ya tenemos instalada una base Mysql y ponemos nuestras credenciales de Bases de Datos.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=tuuser
DB_PASSWORD=tupasssword
Luego configuramos el email, no olvidar usar la password que nos da google para nuestra aplicación
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=xxxxxxxxx@gmail.com
MAIL_PASSWORD=GOOGLE_PASSWORD
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=xxxxxx@gmail.com
MAIL_FROM_NAME=»nombre a mostrar»
Por último ejecutamos el siguiente comando para que laravel cree las tablas necesarias en nuestra base de datos, para correr la aplicación, a nosotros nos interesa la tabla user.
php artisan migrate
Al revisar nuestra base enocntraremos que sean creado algunas tablas. La tabla user debe tener un campo email_verified_at, el cual nos indicará si un usuario registrado ha validado su email.

No olvidar ejecutar php artisan config:cache para que Laravel tome los cambios de nuestro archivo.
Nota: Si quieres agregar un usuario por defecto a nuestro sistema usando Tinker aquí te dejo un link https://tenocode.com/laravel-registrar-usuario-manualmente/
Codificando
Una vez listas las configuraciones para registrar y confirmar el correo de nuestros usuarios en Laravel, manos a la obra… empezamos con modificar nuestro archivo de laravel user.php, ques esta ubicado dentro de App\Models:
use Illuminate\Contracts\Auth\MustVerifyEmail;
class User extends Authenticatable implements MustVerifyEmail{
//implementacion del user model
}
Como se puede ver, se debe extender a MustVerifyEmail. Siguietne paso es crear nuestro template de email:
php artisan make:notification VerifyEmailNotification
En nuestro controller de registro de usuario, sino has creado ningun controller con este comando ya tenemos uno:
php artisan make:controller RegisterController
Nuestro controller de registro debiera quedar:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Models\User;
class RegisterController extends Controller
{
function register(Request $request) {
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$passHash = Hash::make($request->password);
$user->password = $passHash;
$user->save();
$user->sendEmailVerificationNotification();
return response('',201);
}
}
Agregamos la ruta que debe crearse en nuestro archivo routes\api.php (o en cualquier archivo de rutas que ya tengas configurado).
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RegisterController;
Route::post('/register', [RegisterController::class,'register'])->name('verification.verify');;
Listo, ya podemos usar nuestra api de registro y verificación de email, para hacer nuestrar pruebas vamos a utilizar Postman.
Testeando la validación de email

Al revisar nuestra base de datos debiesemos tener el usuario insertado, y al revisar nuestro correo nos debería llegar un mail con un link de confirmación de email:


En conclusión, laravel nos facilita la vida con estas funcionalidades ya semi implementadas. Si quieres personalizar este email de notificación, te dejo el siguiente link: https://tenocode.com/personalizar-correo-de-confirmacion-de-email-de-laravel/