如何修改Laravel 8 Fortify发送邮箱验证请求的默认邮件模板?
刚好我之前在Laravel 8 + Fortify的项目里做过这个需求,给你两种可行的方案,按需选择就行:
方案一:直接覆盖默认验证邮件视图
这种方法最简单,适合只需要修改邮件内容样式的场景:
- Laravel 默认的邮箱验证视图存放在框架的
vendor/laravel/framework/src/Illuminate/Notifications/resources/views/verify-email.blade.php - 你只需要把这个文件复制到项目的
resources/views/vendor/notifications/目录下(如果vendor/notifications目录不存在,手动创建即可) - 然后打开复制后的
verify-email.blade.php,按照你的需求修改HTML结构、文字内容或者样式就可以了。Fortify会自动优先加载你自定义的这个视图。
方案二:自定义通知类(更灵活)
如果需要修改邮件主题、添加额外数据或者完全自定义视图结构,推荐用这种方式:
- 创建自定义通知类
在app/Notifications目录下新建CustomVerificationEmail.php文件,内容如下:
<?php namespace App\Notifications; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Auth\Notifications\VerifyEmail as VerifyEmailNotification; class CustomVerificationEmail extends VerifyEmailNotification { // 自定义邮件内容和视图 public function toMail($notifiable) { $verificationUrl = $this->verificationUrl($notifiable); // 如果你想用自定义视图,就用view方法;如果只是改文字,用默认的MailMessage方法就行 return (new MailMessage) ->subject('【你的网站名】请验证你的邮箱') ->greeting('嗨,'.$notifiable->name.'!') ->line('感谢你注册我们的网站,请点击下方按钮完成邮箱验证。') ->action('立即验证邮箱', $verificationUrl) ->line('如果这不是你操作的,请忽略此邮件。'); // 如果你要完全自定义HTML视图,替换上面的return为下面这段: // return (new MailMessage) // ->subject('【你的网站名】请验证你的邮箱') // ->view( // 'emails.verify-email', // 自定义视图路径 // ['user' => $notifiable, 'verificationUrl' => $verificationUrl] // ); } }
- 告诉Fortify使用自定义通知类
打开app/Providers/FortifyServiceProvider.php,在boot方法里添加以下代码:
use App\Notifications\CustomVerificationEmail; use Laravel\Fortify\Fortify; public function boot() { // 保留原有的boot方法内容,新增下面这段 Fortify::verifyEmailNotification(function ($user) { return new CustomVerificationEmail(); }); }
- 如果用自定义HTML视图(可选)
如果上面的通知类里用了view方法,需要创建对应的视图文件resources/views/emails/verify-email.blade.php,比如:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>邮箱验证</title> <style> /* 自定义邮件样式 */ .email-container { max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #eee; border-radius: 8px; } .verify-btn { display: inline-block; padding: 10px 20px; background: #2563eb; color: white; text-decoration: none; border-radius: 4px; } </style> </head> <body> <div class="email-container"> <h2>嗨,{{ $user->name }}!</h2> <p>感谢你加入我们,请点击下方按钮验证你的邮箱地址:</p> <p><a href="{{ $verificationUrl }}" class="verify-btn">验证我的邮箱</a></p> <p>如果这不是你操作的,请忽略此邮件。</p> </div> </body> </html>
最后,测试一下注册流程,看看收到的邮件是不是你自定义的模板就大功告成啦!
内容的提问来源于stack exchange,提问作者jiedevm
相关产品推荐
相关产品推荐

