使用Laravel Mail的bcc方法发批量邮件出现RFC 2822地址合规错误
BCC批量发邮件报错修复方案
核心报错原因
- 你调用
bcc('$users')时使用了单引号包裹$users变量,PHP中单引号不会解析内部变量,实际传给bcc方法的是字符串$users而非真实的邮箱列表,自然不符合RFC 2822的邮箱格式要求。 - 你查询得到的
$users是二维数组(结构为[['email' => 'a@test.com'], ['email' => 'b@test.com']...]),Laravel的bcc方法需要接收一维邮箱数组/单个邮箱字符串,格式不匹配。 - 原有代码的查询语句存在语法错误,
whereIn方法调用后缺少闭合右括号;同时to(abc@gmail.com)没有给邮箱字符串加引号,会被PHP识别为未定义常量,触发语法错误。
修复后代码
public function welcomeEmails() { // 直接查询得到一维邮箱数组,修正语法错误 $users = User::whereIn('id',[5,6,7])->pluck('email')->toArray(); Mail::send('emails.welcome_email', [], function($message) use ($users) { $message->to('abc@gmail.com') // 去掉单引号直接传一维邮箱数组 ->bcc($users) ->subject('Welcome to the jobsee'); }); Session::flash('success', 'Your message was sent!'); return redirect()->back(); }
补充说明
- 如果需要同时指定收件人名称,bcc可以传键值对数组,格式为
['邮箱地址' => '收件人名称'] - 批量发送时建议加队列异步处理,避免请求超时
内容的提问来源于stack exchange,提问作者Bakhtawar Ashraf
相关产品推荐
相关产品推荐

