PHPMailer发送邮件重复问题求助:脚本仅执行一次却收两份邮件
问题分析与解决
你的代码本身没有问题,也不是PHPMailer的Bug——代码里仅调用了一次$mail->send(),不可能主动触发两次发送。出现两封主题不同的邮件,核心原因是你的脚本被执行了两次,而非单次执行流程内发送了两份邮件。
可能的触发原因
- 浏览器重复请求:比如手动刷新页面,或浏览器因请求超时自动发起重试(即便第一次发送已成功)。
- 前端重复提交:如果脚本由表单触发,可能存在按钮被连续点击两次、或表单自动重复提交的情况。
- 服务器异常:比如PHP-FPM进程异常重启、脚本被定时任务(如cron)误重复调用(但你提到脚本仅执行一次,此概率较低)。
验证与解决步骤
- 查看SMTP调试日志:你已开启
SMTP::DEBUG_SERVER,检查输出里的SMTP发送流程次数。如果仅出现一次完整发送记录,即可确认是脚本被执行了两次;若出现两次,再排查PHPMailer的异常(但从你的代码看不可能发生)。 - 检查服务器访问日志:查看Nginx/Apache的访问日志,找到该脚本的请求记录,确认是否存在两次独立请求。
- 避免重复执行的方案:
- 若由表单触发,发送成功后立即重定向到结果页面,比如添加代码:
避免用户刷新页面重复触发发送。$mail->send(); header('Location: mail_success.php'); exit; - 添加执行日志验证:在脚本开头写入日志,记录执行时间与唯一标识,以此确认是否存在两次执行:
执行后查看日志文件,若出现两行记录,即可坐实脚本被执行两次的结论。file_put_contents('mail_exec_log.txt', date('Y-m-d H:i:s') . ' - 执行ID:' . uniqid('', true) . "\n", FILE_APPEND);
- 若由表单触发,发送成功后立即重定向到结果页面,比如添加代码:
内容的提问来源于stack exchange,提问作者Andres SK
相关产品推荐
相关产品推荐

