You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中使用laravel/ui替换自定义密码重置与邮箱确认邮件模板

替换Laravel 9 Auth自定义邮件模板(密码重置/邮箱确认)

当然可以替换成自定义的Blade模板,以下是具体实现步骤:

方法一:发布默认模板后修改

Laravel 默认把认证相关的邮件视图放在框架内部目录,你可以先将这些模板发布到项目的resources/views目录下,再进行自定义修改:

  1. 发布邮件模板
    执行以下命令,将Laravel自带的邮件模板同步到项目本地:

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

    执行完成后,你会在resources/views/vendor/mail看到邮件基础布局模板,认证相关的模板会出现在resources/views/auth目录下(比如密码重置的passwords/reset.blade.php、邮箱验证的verify.blade.php)。

  2. 自定义模板内容
    直接编辑上述目录下的Blade文件,按需调整HTML结构、样式、文案即可。修改后,系统会自动使用这些自定义模板发送邮件。

方法二:完全自定义模板(更灵活)

如果不想依赖默认模板结构,可以完全创建独立的Blade文件,再修改对应的通知类指定使用新模板:

1. 创建自定义Blade模板

在resources/views目录下新建模板文件,比如:

  • 密码重置模板:resources/views/emails/password-reset.blade.php
  • 邮箱确认模板:resources/views/emails/verify-email.blade.php

模板中需要使用通知类传递的核心变量:

  • 密码重置模板需用$url(重置链接)
  • 邮箱确认模板需用$verificationUrl(验证链接)

示例自定义密码重置模板片段:

<!DOCTYPE html>
<html>
<head>
    <title>重置你的密码</title>
</head>
<body>
    <h1>你好,{{ $notifiable->name }}</h1>
    <p>点击下方链接重置你的密码:</p>
    <a href="{{ $url }}">重置密码</a>
    <p>若不是你发起的请求,请忽略此邮件。</p>
</body>
</html>

2. 重写Auth通知类

Laravel的认证通知(密码重置、邮箱确认)通过通知类实现,你需要创建自定义通知类替换默认类:

自定义密码重置通知类

在app/Notifications目录下创建CustomPasswordReset.php:

<?php

namespace App\Notifications;

use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;
use Illuminate\Notifications\Messages\MailMessage;

class CustomPasswordReset extends ResetPasswordNotification
{
    public function toMail($notifiable)
    {
        $resetUrl = $this->resetUrl($notifiable);

        return (new MailMessage)
            ->subject('自定义密码重置邮件')
            ->view(
                'emails.password-reset', // 指定自定义模板路径
                ['url' => $resetUrl, 'notifiable' => $notifiable]
            );
    }
}

自定义邮箱确认通知类

在app/Notifications目录下创建CustomVerifyEmail.php:

<?php

namespace App\Notifications;

use Illuminate\Auth\Notifications\VerifyEmail as VerifyEmailNotification;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Lang;

class CustomVerifyEmail extends VerifyEmailNotification
{
    public function toMail($notifiable)
    {
        $verificationUrl = $this->verificationUrl($notifiable);

        if (static::$toMailCallback) {
            return call_user_func(static::$toMailCallback, $notifiable, $verificationUrl);
        }

        return (new MailMessage)
            ->subject(Lang::get('自定义邮箱验证'))
            ->view(
                'emails.verify-email', // 指定自定义模板路径
                ['verificationUrl' => $verificationUrl, 'notifiable' => $notifiable]
            );
    }
}

3. 在User模型中替换通知类

打开app/Models/User.php,添加或修改以下方法,指定使用自定义通知类:

<?php

namespace App\Models;

use App\Notifications\CustomPasswordReset;
use App\Notifications\CustomVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    // ... 其他原有代码

    /**
     * 发送密码重置通知
     *
     * @param  string  $token
     * @return void
     */
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new CustomPasswordReset($token));
    }

    /**
     * 发送邮箱验证通知
     *
     * @return void
     */
    public function sendEmailVerificationNotification()
    {
        $this->notify(new CustomVerifyEmail);
    }
}

完成以上设置后,系统发送密码重置和邮箱确认邮件时,就会自动使用你自定义的Blade模板。


内容的提问来源于stack exchange,提问作者dev_2108

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:43:34