如何将数组中的邮箱值逐个传入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
相关产品推荐
相关产品推荐

