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

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。解决方式:

  1. 在发送时明确调用cc()方法:
Mail::to(config('mail.to.address'))
    ->cc(array_map('trim', explode(',', config('mail.cc.address'))))
    ->send(new ContactForm($request->except(['_token', '_slug']), $formName));
  1. 登录Postmark控制台,找到对应的服务器设置,关闭"隐藏收件人"选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:18:17