Personalizar email de restablecimiento de contraseña en Laravel.

Laravel incluye de serie la funcionalidad para el restablecimiento de contraseña. Si ya tienes todo configurado y lo único que quieres es cambiar el texto del email que se envía por defecto tienes dos opciones:

  1. Dejar el email tal cual y solo cambiar el idioma mediante un archivo de traducciones.
  2. Crear una nueva notificación personalizada para reemplazar la estructura existente del mensaje por defecto.

Para realizar la segunda opción vamos a necesitar crear una nueva notificación de Laravel usando el siguiente comando:

 php artisan make:notification ResetPassword 

Este comando crea un nuevo archivo de notificación que se guarda en la carpeta app/Notifications. Una vez creada la nueva notificación podemos personalizar el email que se envía mediante la función toMail.

Para ahorrarnos algo de trabajo podemos reutilizar la notificación por default ResetPassword y tambien la clase MailMessage de Laravel y tan solo cambiar el orden y el idioma de los párrafos, de tal forma que un email de restablecimiento de contraseña quede así:

<?php

namespace App\Notifications;

use \Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Lang;

class ResetPassword extends ResetPasswordNotification
{

    /**
     * Build the mail representation of the notification.
     *
     * @param mixed $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject(Lang::get('Solicitud de restablecimiento de contraseña'))
            ->line(Lang::get('Hola, se solicitó un restablecimiento de contraseña para tu cuenta ' . $notifiable->getEmailForPasswordReset() . ', haz clic en el botón que aparece a continuación para cambiar tu contraseña.'))
            ->action(Lang::get('Cambiar contraseña'), url(config('app.url') . route('password.reset', ['token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset()], false)))
            ->line(Lang::get('Si tu no realizaste la solicitud de cambio de contraseña, solo ignora este mensaje. '))
            ->line(Lang::get('Este enlace solo es válido dentro de los proximos :count minutos.', ['count' => config('auth.passwords.' . config('auth.defaults.passwords') . '.expire')]));
    }
}

Por último tan solo tenemos que decirle a Laravel que queremos usar nuestra nueva notificación en lugar de la notificación por defecto, para ello debemos editar el modelo de Usuario y sobreescribir el método sendPasswordResetNotification.


use App\Notifications\ResetPassword;


....


    /**
     * Send the password reset notification.
     *
     * @param string $token
     * @return void
     */
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new ResetPassword($token));
    }

Al final obtendremos un email con el siguiente aspecto:

Email de restablecimiento de contraseña

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *