Laravel Admin中完成编辑操作后如何发送邮件?
在Laravel Admin中完成编辑操作后实现邮件发送
前提准备
- 先确保
.env文件中已正确配置邮箱服务参数(以SMTP为例):
MAIL_MAILER=smtp MAIL_HOST=smtp.example.com MAIL_PORT=587 MAIL_USERNAME=your-email@example.com MAIL_PASSWORD=your-app-password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=your-email@example.com MAIL_FROM_NAME="${APP_NAME}"
- 创建邮件通知类
执行Artisan命令生成邮件类:
php artisan make:mail EditRecordNotification
实现方案(二选一)
方案一:在Laravel Admin控制器中直接处理
针对单个资源的编辑操作触发邮件,可在对应Admin控制器中重写update方法:
<?php namespace App\Admin\Controllers; use App\Models\User; // 替换为你的业务模型 use Encore\Admin\Controllers\AdminController; use Encore\Admin\Layout\Content; use Illuminate\Support\Facades\Mail; use App\Mail\EditRecordNotification; class UserController extends AdminController { // ... 控制器其他配置代码 public function update(Content $content) { // 执行Laravel Admin默认的更新逻辑 $response = parent::update($content); // 获取更新后的模型实例 $model = $this->form->model(); // 核心发送逻辑(对应你提供的示例代码) Mail::to($model->email)->send(new EditRecordNotification($model)); return $response; } }
方案二:利用模型全局事件触发
如果希望任何场景下修改模型数据都发送邮件,可在模型中注册saved事件:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Mail; use App\Mail\EditRecordNotification; class User extends Model { protected static function booted() { static::saved(function ($model) { // 仅当模型是更新操作(非创建)时触发 if ($model->wasChanged()) { Mail::to($model->email)->send(new EditRecordNotification($model)); } }); } }
完善邮件类内容
打开生成的EditRecordNotification类,配置邮件主题和关联视图:
<?php namespace App\Mail; use App\Models\User; // 替换为你的业务模型 use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class EditRecordNotification extends Mailable { use Queueable, SerializesModels; public $model; public function __construct(User $model) { $this->model = $model; } public function build() { return $this->subject('您的记录已更新') ->view('emails.edit_notification'); // 邮件视图路径 } }
创建邮件视图
在resources/views/emails目录下创建edit_notification.blade.php,编写邮件内容:
<p>您好,{{ $model->name }}:</p> <p>您的账户信息已成功更新,如需核对请登录系统查看详情。</p>
优化建议
- 若邮件发送耗时较长,建议改用队列异步发送,将
send()替换为queue():
需确保已配置队列驱动(如Redis、Database)并启动队列 worker:Mail::to($model->email)->queue(new EditRecordNotification($model));php artisan queue:work
操作说明示意图

内容的提问来源于stack exchange,提问作者John Smeet
相关产品推荐
相关产品推荐

