用自定义模板laravel 5.3替换密码重置邮件模板

时间:2016-12-30 17:45:08

标签: laravel

我为身份验证系统执行了laravel命令,php artisan make:auth它为我的应用程序创建了身份验证系统,几乎所有内容都正常工作。

现在,当我使用忘记密码并向我发送一个令牌给我的邮件ID时,我看到该模板包含laravel和其他一些我可能想要编辑或省略的东西,确切地说,我想要我的自定义模板在那里使用。

我抬头看着控制器及其源文件,但我找不到模板或在邮件中显示html的代码。

我该怎么做?

我该如何更改?

这是laravel到邮件的默认模板。 enter image description here

6 个答案:

答案 0 :(得分:28)

简单说明:除了上一个答案之外,如果您想要修改 通知行 ,还有You are receiving this...等,还有其他步骤。以下是分步指南。

您需要sendPasswordResetNotification模型上的override the default 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));
}

最后,create that notification

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's 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.');
}

答案 1 :(得分:16)

在终端中运行以下命令,两个电子邮件模板将复制到您的资源/供应商/通知文件夹中。然后你可以修改模板。

 <script src="page1.js"></script>
<script src="assets/sliderfunctions.js"></script>
<script src="assets/js/custom.js"></script>

您可以在Laravel Docs中详细了解php artisan vendor:publish --tag=laravel-notifications

答案 2 :(得分:4)

如果您希望修改邮件模板,然后检查Laravel markdown,则可以在此处更改默认邮件模板:

如果您确实希望获取HTML并能够对其进行编辑,请运行以下命令:

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

这将发生:

复制目录 [/ vendor / laravel / framework / src / Illuminate / Mail /资源/视图]至 [/ resources / views / vendor / mail]

资源:https://laraveldaily.com/mail-notifications-customize-templates/

答案 3 :(得分:2)

在.env文件或config / app.php文件中,您必须更改应用名称,并且可以正常工作。

答案 4 :(得分:0)

您也可以通过构建自己的邮件模板并使用php mail()或Laravel Mail Facade自行发送重置链接来实现此目的,但首先您需要创建重置令牌

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;

                }

答案 5 :(得分:0)

我最终在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]);
    });
}