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

如何将数组中的邮箱值逐个传入Mail类实现逐一发送邮件

解决方案

方案1:优化邮箱查询逻辑(更简洁,推荐)

你目前获取到的$vendorEmails是二维数组,每一层都需要单独取email字段,我们可以直接在查询阶段拿到一维邮箱数组,减少后续处理逻辑:

// 原有获取vendor_id逻辑不变
$vendorsId = OrdersProduct::select('vendor_id')->where('order_id', $order_id)->pluck('vendor_id');

// 直接pluck email字段得到一维数组,结果示例:['mxxxxx@gmail.com', 'myyyyy@gmail.com']
$vendorEmails = Admin::whereIn('id', $vendorsId)->pluck('email')->toArray();

$messageData = [
    'order_id' => $order_id,                  
];

// 遍历邮箱数组逐个发送
foreach ($vendorEmails as $email) {
    Mail::send('emails.order', $messageData, function ($message) use ($email) {
        $message->to($email)->subject('Order Placed');
    });
}

方案2:兼容现有二维数组的写法

如果你不想调整现有查询逻辑,直接遍历原有二维数组取email字段即可:

$vendorsId = OrdersProduct::select('vendor_id')->where('order_id', $order_id)->pluck('vendor_id');
$vendorEmails = Admin::select('email')->whereIn('id', $vendorsId)->get()->toArray();

$messageData = [
    'order_id' => $order_id,                  
];

foreach ($vendorEmails as $vendor) {
    // 取二维数组中的email字段
    $email = $vendor['email'];
    Mail::send('emails.order', $messageData, function ($message) use ($email) {
        $message->to($email)->subject('Order Placed');
    });
}

补充说明

如果需要发送的邮箱数量较多,建议使用Laravel邮件队列处理,避免请求超时、影响用户体验。

内容的提问来源于stack exchange,提问作者Muqadar Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:45:01