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

Laravel 8 如何在用户下单时向产品所有者发送通知邮件

解决方案

现有代码问题排查

  • 控制器参数传递错误:你定义的订单数据变量是$orderData,但传入通知类的是未定义的$order_file,导致通知类拿不到正确的订单数据
  • 需确认User模型已引入Notifiable trait,否则notify方法无法正常调用
  • 若.env文件邮件配置未正确配置,会直接导致邮件发送失败
  • 当前通知类的邮件按钮文案不合理,直接用user_id作为按钮文字,用户体验差
  • 冗余代码:Order::create($orderData)->save()中create方法已经完成数据写入,额外调用save无意义

修正步骤

1. 修正控制器传参

将下单方法中的通知调用代码修改为:

public function store( Product $product, Request $request)
{
    $orderData = [
        'info' => $request->info,
        'min' => $request->min,
        'max' => $request->max,
        'file' => $file_name,
        'product_id' => $product->id,
        'user_id' => auth()->id(),
        'owner_id' => $product->user->id
    ];
    try {
        // 去掉冗余的save调用
        Order::create($orderData);
        // 传入正确的订单变量
        $product->user->notify(new OrderNotification($orderData));
        return redirect()->route('home')->with('status', 'your orders has been sent successfully');
    }catch (\Exception $e) {
        return redirect()->back()->with('status', 'this product has already in your order list');
    }
}

2. 确认User模型引入Notifiable trait

检查app/Models/User.php,确保类中引入了通知所需的trait:

use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable; // 确保存在这行代码
    // 其余业务代码保持不变
}

3. 配置.env邮件参数

根据你使用的邮件服务配置.env中的邮件项,QQ/163邮箱示例配置如下:

MAIL_MAILER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=你的发件邮箱地址
MAIL_PASSWORD=你的邮箱授权码
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=你的发件邮箱地址
MAIL_FROM_NAME="${APP_NAME}"

4. 优化通知类邮件内容(可选)

调整邮件的标题、按钮文案和跳转链接,提升可读性:

public function toMail($notifiable)
{
    return (new MailMessage)
                ->subject('收到新的产品订单')
                ->line('新订单信息:' . $this->insertOrderData['info'])
                ->action('查看订单详情', url('/orders/'.$this->insertOrderData['product_id']))
                ->line('感谢使用我们的服务!');
}

5. 队列配置(可选)

如果需要异步发送邮件避免请求阻塞,确保运行队列监听命令:

php artisan queue:work

如果不需要异步发送,直接删除通知类里的use Queueable;代码即可改为同步发送。


功能验证

完成上述修改后提交测试订单,查看产品所有者的邮箱是否收到通知即可。如果发送失败,可以查看storage/logs/laravel.log中的错误日志排查具体问题。

内容的提问来源于stack exchange,提问作者Osama Mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:42:00