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
相关产品推荐
相关产品推荐

