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

Laravel Admin中完成编辑操作后如何发送邮件?

在Laravel Admin中完成编辑操作后实现邮件发送

前提准备

  1. 先确保.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}"
  1. 创建邮件通知类
    执行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():
    Mail::to($model->email)->queue(new EditRecordNotification($model));
    
    需确保已配置队列驱动(如Redis、Database)并启动队列 worker:php artisan queue:work

操作说明示意图

Laravel Admin编辑操作后邮件发送说明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:50:27