Заменить пароль reset почтовый шаблон с настраиваемым шаблоном laravel 5.3

Я выполнил команду laravel для системы аутентификации, php artisan make:auth сделал систему аутентификации для моего приложения и почти все работает.

Теперь, когда я использую забытый пароль, и он отправляет мне токен на мой идентификатор почты, я вижу, что шаблон содержит laravel и некоторые другие вещи, которые я могу изменить или опустить, если быть точным, я хочу, чтобы мой пользовательский шаблон там будет использоваться.

Я посмотрел на контроллеры и их исходные файлы, но я не могу найти шаблон или код, отображающий html в письме.

Как мне это сделать?

Как мне изменить его?

Это шаблон по умолчанию, который приходит от laravel к почте. введите описание изображения здесь

Ответ 1

Выполните следующую команду в терминале, и два шаблона электронной почты будут скопированы в вашу папку resources/vendor/notifications. Затем вы можете изменить шаблоны.

php artisan vendor:publish --tag=laravel-notifications

Вы можете прочитать больше об Notifications в Документах Laravel.

Ответ 2

Просто голова: в дополнение к предыдущему ответу, есть дополнительные шаги, если вы хотите изменить строки уведомлений, например You are receiving this... и т.д. Ниже приведено пошаговое руководство.

Вам понадобится переопределить метод по умолчанию sendPasswordResetNotification по умолчанию User.

Почему? Потому что строки вытягиваются из Illuminate\Auth\Notifications\ResetPassword.php. Изменение его в ядре означает, что ваши изменения будут потеряны во время обновления Laravel.

Чтобы сделать это, добавьте следующее в свою модель User.

use App\Notifications\PasswordReset; // Or the location that you store your notifications (this is default).

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

Наконец, создать это уведомление:

php artisan make:notification PasswordReset

И пример этого содержимого уведомления:

/**
 * The password reset token.
 *
 * @var string
 */
public $token;

/**
 * Create a new notification instance.
 *
 * @return void
 */
public function __construct($token)
{
    $this->token = $token;
}

/**
 * Get the notification delivery channels.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function via($notifiable)
{
    return ['mail'];
}

/**
 * Build the mail representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return \Illuminate\Notifications\Messages\MailMessage
 */
public function toMail($notifiable)
{
    return (new MailMessage)
        ->line('You are receiving this email because we received a password reset request for your account.') // Here are the lines you can safely override
        ->action('Reset Password', url('password/reset', $this->token))
        ->line('If you did not request a password reset, no further action is required.');
}

Ответ 3

Вы также можете достичь этого, создав свой собственный почтовый шаблон и отправив ссылку Reset самостоятельно, используя php mail() или или Laravel Mail Facade, но сначала вам нужно будет создать токен Reset

1) use Illuminate\Contracts\Auth\PasswordBroker;

  $user = User::where('email', $email)->first();
                 if ($user) {
                    //so we can have dependency 
                    $password_broker = app(PasswordBroker::class);
                    //create reset password token 
                    $token = $password_broker->createToken($user); 

                    DB::table('password_resets')->insert(['email' => $user->email, 'token' => $token, 'created_at' => new Carbon]); 

//Send the reset token with your own template
//It can be like $link = url('/').'/password/reset/'.$token;

                }

Ответ 4

Я закончил тем, что использовал Фасад Mail в User модели..

public function sendPasswordResetNotification($token){
    // $this->notify(new MyCustomResetPasswordNotification($token)); <--- remove this, use Mail instead like below

    $data = [
        $this->email
    ];

    Mail::send('email.reset-password', [
        'fullname'      => $this->fullname,
        'reset_url'     => route('user.password.reset', ['token' => $token, 'email' => $this->email]),
    ], function($message) use($data){
        $message->subject('Reset Password Request');
        $message->to($data[0]);
    });
}