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

PHPMailer 6.0.5 SMTP中继问题:发送记录正常但邮件丢失

邮件发送成功但丢失问题的排查分析

咱先梳理下你的情况:用Postfix+PHP mail()时,日志显示中继成功但邮件丢了;换成最新PHPMailer后问题依旧,不过命令行能正常发测试邮件。从你贴的PHPMailer日志来看,有个非常关键的点——日志在DATA命令之后只输出了部分邮件头就中断了,没有看到邮件正文、结束标记.,也没有服务器返回的250 2.0.0 Ok这类确认邮件提交成功的响应。

可能的原因及排查步骤

1. 邮件发送过程中被中断

日志不完整说明PHPMailer在发送邮件内容阶段可能遇到了异常,但没被完整捕获。你可以:

  • 完善PHPMailer的错误捕获逻辑:在发送代码里加上try-catch,确保能拿到详细错误信息,示例代码:
try {
    $mail->send();
    echo '邮件发送成功';
} catch (Exception $e) {
    echo "邮件发送失败:{$mail->ErrorInfo}";
}
  • 检查PHP运行日志:查看服务器上的PHP error_log文件,找有没有脚本超时、内存不足、函数被禁用(比如fsockopen)这类错误,这些都可能导致发送中途中断。

2. 邮件被中继/收件方服务器静默丢弃

虽然Postfix或SMTP中继日志显示“成功”,但很多邮件服务商会因为认证或内容问题直接静默丢弃邮件,不返回错误:

  • 验证SPF/DKIM/DMARC配置:
    • SPF:确保你信封发件人(就是日志里的MAIL FROM地址)的域名SPF记录包含include:smtp.api.createsend.com,因为你用的是这个中继服务器
    • DKIM:如果你的平台支持,在PHPMailer里开启DKIM签名,配置好域名、选择器和私钥,这能大幅提升邮件可信度
    • DMARC:查一下收件人域名的DMARC记录,如果是p=reject,那未通过SPF/DKIM认证的邮件会被直接拒收
  • 联系中继服务器支持:找smtp.api.createsend.com的技术支持,查他们那边的邮件记录,确认邮件是不是被接收后又被下游丢弃,以及具体原因。

3. 平台软件的邮件发送逻辑问题

基础测试脚本正常,但平台里不行,大概率是平台内部的配置或逻辑有问题:

  • 核对邮件参数:检查平台里设置的发件人地址、收件人地址格式是否正确,有没有和SMTP认证账号不匹配的情况(有些中继要求发件人必须是认证账号所属域名)
  • 测试平台邮件内容:把平台里要发送的邮件内容(包括附件、特殊字符)复制到你的基础测试脚本里发送,看是否能成功,排除内容本身的问题
  • 检查循环发送逻辑:如果是批量发送,看看平台里有没有正确重置PHPMailer实例,避免因为复用实例导致的发送异常

总结

目前来看,最优先的是补全错误捕获,拿到PHPMailer的完整错误信息,同时检查PHP运行日志;其次验证域名的邮件认证配置,这是静默丢件的常见原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:22:58