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

Laravel Mail抄送(CC)功能异常:收件人被错误设为主收件人

解决Laravel Mail + Mandrill 抄送(CC)显示异常问题

你的问题根源在于Mandrill邮件驱动默认启用了批量发送模式——该模式会把每个收件人(包括CC)拆分为单独邮件发送,导致收件人看不到抄送列表,且所有CC邮箱都会收到以自身为主收件人的邮件。以下是具体解决方法:

1. 发送时强制禁用Mandrill批量发送

在邮件发送代码中添加SwiftMessage头信息,强制关闭批量发送逻辑:

$email_addresses = ['test1@example.com','test2@example.com','test3@example.com'];
$to_email = array_shift($email_addresses);

Mail::mailer('mandrill')
    ->to([$to_email])
    ->cc($email_addresses)
    ->withSwiftMessage(function ($swiftMessage) {
        // 禁用Mandrill批量发送,确保所有收件人在同一封邮件中
        $swiftMessage->getHeaders()->addTextHeader('X-Mandrill-Batch', 'false');
    })
    ->send(new PortalEmail($message));

2. 检查邮件类(PortalEmail)的构造逻辑

确认PortalEmail类的build方法中没有覆盖外部设置的收件人/抄送信息。如果邮件类内部调用了to()、cc()方法,会直接覆盖你在外部设置的参数,导致批量发送问题。

比如存在以下错误代码时,需要移除内部的to()调用:

// PortalEmail.php 错误示例
public function build()
{
    // 此处的to()会覆盖外部设置的收件人,导致每个CC邮箱单独收件
    return $this->to($this->message->recipients)
                ->view('emails.portal');
}

修正为:

public function build()
{
    return $this->view('emails.portal');
}

3. 检查Mandrill后台全局设置

登录Mandrill管理后台,进入Settings > Sending Defaults,确认是否开启了"Batch sending"选项。如果全局开启该选项,即使代码中设置了头信息也可能被覆盖,需要关闭该选项,或确保发送时的头信息优先级更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:27:46