Cómo habilitar verificación de email de Laravel y personalizar plantillas de correos
En esta publicación, habilitaremos la verificación de email y la personalización de plantillas de correo electrónico.
En el Panel de administración básico de Laravel, implementamos la mayoría de las funciones básicas.
Laravel proporciona servicios integrados para enviar y verificar la verificación de correo electrónico después del registro del usuario.
1. Configurar el correo
2. Habilite la verificación de correo electrónico en el modelo
3. Agregar middleware verified
4. Verificación de correo electrónico con MailHog
5. Personalización del contenido del correo electrónico
6. Personalización de la plantilla de correo electrónico
1. Configurar el correo
La configuración de correo de Laravel está disponible en la ruta config/mail.php
. Laravel proporciona una API de correo electrónico limpia y simple impulsada por el popular componente Symfony Mailer.
Por lo general, utilizamos diferentes servicios de correo para cada entorno. Así que agregue la siguiente configuración en el archivo .env
MAIL_MAILER=smtp MAIL_HOST=mailhog MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}"
En Larval Sail se configura con MailHog. Veremos MailHog después de la configuración de Verificación de correo electrónico.
2. Habilite la verificación de correo electrónico en el modelo
Para habilitar la verificación de email, debemos implementar Illuminate\Contracts\Auth\MustVerifyEmail
en nuestro modelo de usuario
app/Models/User.php
<?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable implements MustVerifyEmail { use HasApiTokens, HasFactory, Notifiable, HasRoles; // ...
Ahora regístrese como nuevo usuario
Después del registro, recibí el siguiente error
Este problema se debe a que MAIL_FROM_ADDRESS
es nulo. Porque actualizamos nuestro Laravel 8 a Laravel 9. En Laravel 9, este MAIL_FROM_ADDRESS
no debe ser nulo. Así que agregue la dirección de correo electrónico en el .env
MAIL_FROM_ADDRESS="[email protected]"
Después de la actualización de MAIL_FROM_ADDRESS
, pude registrarme y ser redirigido al tablero.
Pero los usuarios no están restringidos a ver las páginas sin verificación de email. Siguiente paso arreglamos esto.
3. Agregar middleware verified
Ahora vamos a agregar middleware verified
a todas las rutas autenticadas
routes/web.php
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
routes/admin.php
<?phpRoute::group([ 'namespace' => 'App\Http\Controllers\Admin', 'prefix' => 'admin', 'middleware' => ['auth', 'verified'], ], function () { //.....
Después de agregar el software intermedio, el usuario es redirigido a la página pendiente de verificación de email. Además, esta página tiene la opción de reenviar el correo electrónico de verificación.
4. Verificación de email con MailHog
Cuando Sail se esté ejecutando, acceda a su MailHog en http://localhost:8025/
MailHog es una herramienta de prueba de correo electrónico para desarrolladores en entornos locales.
Revisa los correos electrónicos recibidos en MailHog. Ahora, haga clic en el enlace de verificación de correo electrónico. Después de la verificación, el usuario puede acceder a las páginas verified
.
5. Personalización del contenido del correo electrónico
Laravel ofrece una opción para modificar el contenido del correo electrónico de verificación. En App\Providers\AuthServiceProvider
necesita llamar toMailUsing
el método desde el método de arranque.
use Illuminate\Auth\Notifications\VerifyEmail; use Illuminate\Notifications\Messages\MailMessage; /** * Register any authentication / authorization services. * * @return void */ public function boot() { // ... VerifyEmail::toMailUsing(function ($notifiable, $url) { return (new MailMessage) ->subject('Verify Email Address') ->line('Click the button below to verify your email address.') ->action('Verify Email Address', $url); }); }
6. Personalización de la plantilla de correo electrónico
Puede modificar la plantilla HTML y de texto sin formato publicando los recursos del paquete de notificación. Ejecute el siguiente comando para copiar las plantillas en sus vistas.
php artisan vendor:publish --tag=laravel-notifications
Las plantillas de notificación por correo se copiarán en la carpeta resources/views/vendor/notifications
.
Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre Laravel: