Cuando estás desarrollando un proyecto en Laravel en ocasiones es necesario notificar a los usuarios del sistema cuando una acción específica se realizó en el mismo y para esto puedes usar las notificaciones por email, en este tutorial te mostraré cómo crear notificaciones por email en Laravel 8 para que puedas usarlas en todos tus proyectos. Sin más, manos a la obra.
Requisitos previos
- Contar con un ambiente de desarrollo como Laragon o Xampp
- Tener una cuenta en Mailtrap para el envío de emails en localhost.
1. Crear nuevo proyecto vía composer
Para crear un nuevo proyecto usando composer ve a la carpeta raíz que alojará tu proyecto, abre una terminal desde esa ubicación y escribe:
composer create-project laravel/laravel notificaciones-email
Una vez que se termino de crear el proyecto desde la terminal ingresa a la carpeta recién creada notificaciones-email.
2. Instalar laravel/ui
Ahora instala el sistema de autenticación laravel/ui (puedes instalar el sistema de autenticación que más te agrade) tecleando en la terminal los siguientes comandos uno a uno:
composer require laravel/ui php artisan ui bootstrap php artisan ui bootstrap --auth npm i npm run watch-poll npm install && npm run dev
3. Crear base de datos y configurar archivo .env
Para crear una nueva base de datos desde la terminal escribe:
mysql -u root -p
El password se deja en blanco y oprime la tecla Enter. Ingresa el siguiente comando para crear la base de datos desde la consola de MySQL y para salir de la consola solo escribe exit:
CREATE DATABASE notificaciones CHARACTER SET utf8 COLLATE utf8_spanish_ci;
Desde tu editor de código abre el archivo .env y agrega la información de la nueva base de datos que has creado:
Para terminar esta configuración corre las migraciones escribiendo desde tu terminal de comandos:
php artisan migrate
Para ver los cambios aplicados inicia el servidor incorporado a Laravel tecleando php artisan serve y desde el navegador ve a la dirección http://127.0.0.1:8000/ verás que ya puedes registrarte al sistema.
4. Crear Mailable
Para poder enviar notificaciones por correo desde Laravel existen varias formas, en este tutorial abordaremos los «Mailables». Crea un nuevo Mailable escribiendo en tu terminal el siguiente comando:
php artisan make:mail NuevoUsuario
En este proyecto cada vez que un nuevo usuario se registre se mandará un email a una dirección específica. Un Mailable se puede usar para una gran cantidad de escenarios como en un sistema de ventas: cuando se genere una nueva orden o compra se envía un email al administrador, etc.
5. Configurar la clase NuevoUsuario del Mailable
Desde tu editor de texto abre el archivo app/Mail/NuevoUsuario.php, en este archivo las dos partes principales es método contruct() y el método build(). En el método construct() vas a pasar la variable con la información que quieres que se visualice en la vista del email; en el método build() se pueden pasar varios parámetros hacia la vista del email. Observa el código de abajo, cópialo y pégalo en tu archivo.
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class NuevoUsuario extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ public function __construct($usuario) { $this->usuario = $usuario; } /** * Build the message. * * @return $this */ public function build() { return $this->from('[email protected]', 'Sistema Automatizado de Envio de Notificaciones')->subject('Registro de un nuevo usuario')->view('email.nuevo-usuario', ['usuario' => $this->usuario]); } }
6. Crear vista del email
Crea la carpeta resources/views/email y dentro de ella el archivo nuevo-usuario.blade.php. Desde este archivo se crea la vista que se verá en el email, se puede crear con Html5 o simplemente como un archivo de texto, en mi caso lo enviaré como un archivo Html, puedes copiar y pegar el código y modificarlo según tus necesidades:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Nuevo Usuario</title> </head> <body> <div class="card"> <div class="card-header"> Información </div> <div class="card-body"> <h3 class="card-title">Notifiación de nuevo usuario</h3> <p class="card-text">El usuario {{ $usuario->name }}, se acaba de registrar en la plataforma.</p> <p class="card-text">Su correo electrónico es {{ $usuario->email }}.</p> </div> </div> </body> </html>
7. Configurar modelo User
Ahora vas a configurar que después de que suceda un evento en especifico se envíe un email. En este caso cuando un usuario se registre en la app se mandará un email avisando de ello. Abre el archivo app/Models/User.php (en versiones anteriores a Laravel 8 no hay carpeta Models), y agrega el siguiente método:
//Evento se ejecuta cuando un usuario es creado protected static function boot(){ parent::boot(); static::created(function($user){ Mail::to('[email protected]')->send(new NuevoUsuario($user)); }); }
Esta es la parte de la acción, en un escenario real cuando un usuario se registre a tu sistema le puedes mandar un correo de bienvenida.
8. Configurar el archivo .env
Es importante que sepas que para poder enviar notificaciones por email desde Laravel 8 es necesario que en tu archivo .env tengas configurado un cliente smtp, en producción puedes usar una cuenta de gmail o si tienes un hosting y puedes crear cuentas de email solo crea una cuenta especial para enviar correos desde tu sistema y al archivo .env agregas los datos smtp. En este caso como se esta trabajando en localhost puedes usar el servicio de mailtrap.io que es suficiente para cuando se esta desarrollando.
Para configurar el servicio en tu localhost desde tu navegador abre tu cuenta de Mailtrap e ingresa a ella.
Ve al menú My Inbox y en Integration busca PHP y Laravel 7+
Los datos que te muestra cópialos y pégalos
Abre tu archivo .env que esta en la raíz de tu proyecto, localiza la sección en donde se colocan las variables para envío de correo smtp borralas y pega las nuevas variables que te dió Mailtrap:
9. Registra un nuevo usuario
Para probar que el sistema esta funcionando correctamente registra un nuevo usuario y después de hacerlo ve a tu bandeja en Mailtrap verás que tienes un correo avisando que un nuevo usuario se ha registrado.
Conclusión
Aprendiste cómo enviar notificaciones por email en Laravel 8 usando Mailables. Este tipo de notificaciones las puedes usar para diferente escenarios como por ejemplo cuando un usuario realiza una compra, manda un comentario nuevo, necesita hablar con el admin, etc. Si te sirvió este tutorial te invito a que lo compartas en tus redes sociales para llegar a más personas, si tienes dudas o comentarios déjalos en la bandeja de comentarios, estaré al pendiente de ellos. Saludos.
Referencias:
https://laravel.com/docs/8.x/mail