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

Laravel添加Bcc后邮件重复发送问题咨询

解决本地环境SwiftMailer发送带Bcc邮件重复的问题

嘿,我之前在本地用Laravel的Mailable发带Bcc的邮件时也碰到过类似的重复发送问题,结合你的代码和配置,给你几个实用的排查方向和解决办法:

1. 补充Mailtrap的加密配置

你的.env里缺少MAIL_ENCRYPTION配置,Mailtrap的SMTP服务需要TLS加密,本地环境如果没设置这个,可能会导致SwiftMailer发送时触发重试逻辑,进而产生重复邮件。

修改你的.env配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_ENCRYPTION=tls
MAIL_USERNAME=你的Mailtrap用户名
MAIL_PASSWORD=你的Mailtrap密码

2. 调整Bcc的参数格式

试试把Bcc的参数改成数组键值对的形式,有时候本地环境对参数格式的兼容性更严格:

修改mailController.php里的build方法:

public function build() {
    return $this->from('test@gmail.com', 'test')
        ->view('portal.confirmation')
        ->subject('test Email')
        ->bcc(['email@gmail.com' => 'wahdan']); // 改成数组形式
}

3. 排查是否重复调用了邮件发送逻辑

检查你的控制器或者路由代码,有没有不小心两次调用了邮件发送方法,比如:

// 错误示例:重复调用send导致两封邮件
Mail::to('user@example.com')->send(new mailController());
Mail::to('user@example.com')->send(new mailController());

本地环境同步执行时,这种重复调用会直接发送两封邮件,而生产环境如果用了队列,可能因为队列去重或执行延迟没被注意到。

4. 查看Laravel日志排查重试原因

打开storage/logs/laravel.log,搜索邮件发送相关的日志,看看有没有发送失败的记录。如果SwiftMailer第一次发送带Bcc的邮件时因为SMTP握手、权限等问题失败,它会自动重试一次,导致两封邮件出现。

5. 临时禁用调试模式的额外行为

如果你本地开启了APP_DEBUG=true,可以临时改成false试试——有些情况下调试模式会触发Laravel邮件组件的额外输出或重试逻辑,导致重复发送。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:54