如何解决PHPMailer发送邮件进垃圾邮件及Mailed By显示主机参数问题
解决PHPMailer发Gmail进垃圾邮件及Mailed By显示异常问题
这种情况我碰到过好几次,大概率是邮件认证机制或者PHPMailer配置的细节出了问题,咱们一步步排查:
1. 优先检查SPF记录(解决Mailed By显示异常的核心)
Gmail显示的「Mailed By」是基于它识别到的实际发件服务器,和你预期不符,说明你的域名SPF记录没覆盖当前使用的SMTP服务器。
- 登录你的域名DNS管理后台,查看SPF记录格式是否正确,应该包含你当前SMTP服务器的IP或域名,比如:
注意:v=spf1 ip4:192.168.1.1 include:smtp.yourdomain.com ~all~all表示软失败(未匹配的邮件可能进垃圾),-all表示硬失败(直接拒绝),根据你的需求调整;不要用?all(无状态),Gmail会降低信任度。 - 确认SPF记录没有超过10个DNS查询限制,否则会直接失效。
2. 配置并验证DKIM签名
DKIM是Gmail判断邮件合法性的关键指标,之前能正常显示「Signed By」,现在异常可能是密钥过期或配置丢失:
- 在PHPMailer中添加DKIM相关配置:
$mail->DKIM_domain = 'yourdomain.com'; // 你的域名 $mail->DKIM_private = '/path/to/your/dkim-private.key'; // 私钥文件路径 $mail->DKIM_selector = 'default'; // 要和DNS中的DKIM selector一致 $mail->DKIM_passphrase = ''; // 如果私钥有密码则填写,否则留空 $mail->DKIM_identity = $mail->From; - 在DNS中添加对应的DKIM TXT记录,格式为
default._domainkey.yourdomain.com,值为你的公钥内容。 - 发测试邮件后,查看Gmail邮件详情的「Signed By」是否恢复为你的域名,也可以用DKIM验证工具确认签名有效性。
3. 设置DMARC记录
DMARC会指导Gmail如何处理未通过SPF/DKIM认证的邮件,同时提供投递报告帮你排查问题:
- 在DNS中添加DMARC TXT记录,主机名为
_dmarc.yourdomain.com,内容示例:v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:dmarc-reports@yourdomain.comp=quarantine:未通过认证的邮件会被放到垃圾邮件(比p=reject更温和,适合测试)rua:指定接收投递报告的邮箱,你可以定期查看报告,了解哪些邮件未通过认证。
4. 核对PHPMailer的SMTP核心配置
- 确保发件地址一致性:
$mail->From必须是你的域名下的邮箱,不能使用第三方邮箱(比如@gmail.com),同时设置$mail->Sender = $mail->From;,这会指定Return-Path,直接影响Gmail对「Mailed By」的识别。 - SMTP服务器验证:如果用自己的服务器,检查反向解析(PTR记录)是否指向你的域名;如果用第三方SMTP(如Google Workspace、SendGrid),确认账号权限、密码/App Password是否有效,SMTP端口和加密方式是否正确(推荐
SMTPSecure = 'tls',端口587)。 - 避免“垃圾邮件特征”:邮件内容不要包含过多链接、敏感词,不要使用夸张的营销话术,主题简洁明确;如果是批量邮件,务必添加清晰的退订链接。
5. 利用Gmail工具辅助排查
- 标记为非垃圾邮件:发测试邮件到自己的Gmail账号,手动点击「不是垃圾邮件」,帮助Gmail的机器学习模型识别你的发件地址为合法来源。
- 使用Google Postmaster Tools:用你的域名管理员邮箱登录,查看邮件的投递率、SPF/DKIM/DMARC通过率、垃圾邮件率等数据,里面会有具体的失败原因提示。
内容的提问来源于stack exchange,提问作者erimeri




