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

Laravel创建数据时发送邮件失败求助(附Store函数代码)

解决Laravel创建数据后发送邮件的问题

你的现有代码仅完成了数据创建和页面跳转逻辑,未包含邮件发送相关代码,因此无法触发邮件发送。按以下步骤修改即可实现需求:

1. 创建邮件类

执行Artisan命令生成邮件处理类:

php artisan make:mail BulkLabSampleCreated

2. 编辑邮件类

在app/Mail/BulkLabSampleCreated.php中,接收创建后的样本实例,配置邮件主题与视图:

<?php

namespace App\Mail;

use App\Models\BulkLabSample;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class BulkLabSampleCreated extends Mailable
{
    use Queueable, SerializesModels;

    public $bulkLabSample;

    public function __construct(BulkLabSample $bulkLabSample)
    {
        $this->bulkLabSample = $bulkLabSample;
    }

    public function build()
    {
        return $this->subject('新批量实验室样本已创建')
                    ->view('emails.bulk-lab-sample-created');
    }
}

3. 创建邮件视图

在resources/views/emails目录下新建bulk-lab-sample-created.blade.php,编写邮件内容:

<h1>新样本创建通知</h1>
<p>样本ID: {{ $bulkLabSample->id }}</p>
<p>创建人: {{ $bulkLabSample->createdBy->name }}</p>
<!-- 根据需求添加更多字段展示 -->

4. 修改Store方法添加邮件发送逻辑

完善store方法,在数据创建成功后调用邮件发送逻辑(推荐用队列提升响应速度):

public function store(Request $request) // 注意注入Request实例,原代码遗漏该参数
{
    $input = $request->all();
    $user = \Auth::guard()->user();
    $input['created_by'] = $user->id;
    \Log::info('$input'.json_encode([$input]));

    $bulkLabSample = $this->bulkLabSampleRepository->create($input);

    // 替换为实际收件人邮箱
    \Mail::to('target@example.com')->queue(new \App\Mail\BulkLabSampleCreated($bulkLabSample));

    Flash::success(__('messages.saved', ['model' => __('models/bulkLabSamples.singular')]));

    return redirect(route('bulkLabSamples.index'));
}

5. 配置邮件驱动

确保.env文件中邮件配置正确,以SMTP为例:

MAIL_MAILER=smtp
MAIL_HOST=smtp.your-server.com
MAIL_PORT=587
MAIL_USERNAME=your-email@domain.com
MAIL_PASSWORD=your-email-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-email@domain.com
MAIL_FROM_NAME="${APP_NAME}"

注意事项

  • 若使用队列发送邮件,需启动队列worker:php artisan queue:work
  • 确保BulkLabSample模型中定义了createdBy关联(对应created_by字段的用户关系)
  • 测试阶段可将MAIL_MAILER设为log,邮件内容会输出到storage/logs/laravel.log,方便调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:18:30