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
相关产品推荐
相关产品推荐

