Laravel 11邮件异常:循环仅发首收件人/CC添加X-CC头
Laravel 11邮件发送问题解决方案
问题1:循环发送邮件全部发给首个收件人
原因推测
循环中复用的邮件实例可能残留了之前的收件人状态,或者默认邮件配置覆盖了动态设置的收件地址。
解决方法
方法1:直接在Mailable实例上设置收件人
绕过Mail::to()的状态复用问题,每次循环创建Mailable后直接指定收件人:
$recipients = array_merge([config('mail.to.address')], explode(',', config('mail.cc.address'))); foreach ($recipients as $recipient) { $mailable = new ContactForm( $request->except(['_token', '_slug']), $formName ); $mailable->to(trim($recipient)); // 确保地址无空格干扰 Mail::send($mailable); }
方法2:重新获取Mailer实例避免状态残留
如果Laravel的Mail facade缓存了状态,每次循环从容器中新建Mailer实例:
$recipients = array_merge([config('mail.to.address')], explode(',', config('mail.cc.address'))); foreach ($recipients as $recipient) { app(\Illuminate\Mail\Mailer::class) ->to(trim($recipient)) ->send(new ContactForm($request->except(['_token', '_slug']), $formName)); }
方法3:检查默认配置
打开config/mail.php,确认邮件驱动(如postmark)下没有设置默认的to地址,否则会覆盖动态设置:
// 移除mailers中类似的默认配置 'postmark' => [ 'transport' => 'postmark', // 删掉这部分:'to' => ['address' => 'xxx@xxx.com'] ],
问题2:CC头显示为X-CC
如果使用Postmark驱动,这是因为Postmark默认启用了"隐藏收件人"功能,会把CC转为X-CC。解决方式:
- 在发送时明确调用
cc()方法:
Mail::to(config('mail.to.address')) ->cc(array_map('trim', explode(',', config('mail.cc.address')))) ->send(new ContactForm($request->except(['_token', '_slug']), $formName));
- 登录Postmark控制台,找到对应的服务器设置,关闭"隐藏收件人"选项。
内容的提问来源于stack exchange,提问作者Ric
相关产品推荐
相关产品推荐

