PHPMailer设置用户输入邮箱为发件人时邮件无报错无法接收
问题原因
- 你使用的SMTP服务商(kinghost.net)默认限制发件人地址必须与SMTP认证账号同域,不允许代发外域邮箱的邮件,这是SMTP服务商防范垃圾邮件滥用的通用规则,所以只有用@greenervasul.com.br后缀的邮箱作为发件人才能正常发送。
- 即使SMTP服务商放开代发限制,对方邮箱的反垃圾校验规则也会拦截这类邮件:你用用户填写的第三方邮箱作为发件人,但邮件实际从你方域名的服务器发出,对方校验SPF、DKIM记录时会发现你方IP不在用户邮箱域名的允许发件列表中,会直接拒收邮件或放入垃圾箱,这个拦截动作不会在你的发件端返回报错。
解决方案
- 最推荐的修复方案:不使用用户输入的邮箱作为发件人,固定发件人为你的同域认证邮箱,同时添加用户邮箱为回复地址,既可以正常发信,你收到邮件后直接回复也会自动发送到用户的邮箱,修改代码如下:
// 替换原有 $mail->setFrom($from, $name); 代码 $mail->setFrom('nelson@greenervasul.com.br', $name); $mail->addReplyTo($from, $name);
- 修正代码中的配置错误,你当前填写的
SMTPSecure参数值错误,会导致SMTP连接异常:
// 替换原有 $mail->SMTPSecure = 'startls'; 配置 $mail->SMTPSecure = 'tls';
- 生产环境建议将
SMTPDebug参数调整为0,避免输出调试信息泄露SMTP账号等敏感内容。
如果确实需要将用户邮箱展示为发件人,需要先联系SMTP服务商确认允许代发外域地址,同时给你的域名配置正确的SPF、DKIM、DMARC记录,允许你的服务器代发其他域名的邮件,但该方案依旧有很高的概率被对方邮箱服务商拦截,不建议使用。
内容的提问来源于stack exchange,提问作者Bjorn Ruiz
相关产品推荐
相关产品推荐

