PHPMailer 6.7.1无法发送邮件:SMTP客户端主机被拒绝求助
邮件发送失败排查求助
使用PHPMailer 6.7.1发送邮件失败,错误信息:
SMTP Error: The following recipients failed: wrobynson@gmail.com: : Client host rejected: Access denied
调试日志中未出现CLIENT -> SERVER: AUTH LOGIN步骤,设置SMTPSecure为'TLS'或'SSL'均出现相同错误。
调试内容
2023-08-26 11:14:19 Connection: opening to 10.52.202.210:587, timeout=300, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),) 2023-08-26 11:14:19 Connection: opened 2023-08-26 11:14:19 SERVER -> CLIENT: 220 mta1.inner.intraer ESMTP Postfix 2023-08-26 11:14:19 CLIENT -> SERVER: EHLO siop.cindacta1.intraer 2023-08-26 11:14:19 SERVER -> CLIENT: 250-mta1.inner.intraer250-PIPELINING250-SIZE 34603008250-VRFY250-ETRN250-STARTTLS250-AUTH LOGIN PLAIN250-AUTH=LOGIN PLAIN250-ENHANCEDSTATUSCODES250-8BITMIME250-DSN250 CHUNKING 2023-08-26 11:14:19 CLIENT -> SERVER: STARTTLS 2023-08-26 11:14:19 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS 2023-08-26 11:14:19 CLIENT -> SERVER: EHLO siop.cindacta1.intraer 2023-08-26 11:14:19 SERVER -> CLIENT: 250-mta1.inner.intraer250-PIPELINING250-SIZE 34603008250-VRFY250-ETRN250-AUTH LOGIN PLAIN250-AUTH=LOGIN PLAIN250-ENHANCEDSTATUSCODES250-8BITMIME250-DSN250 CHUNKING 2023-08-26 11:14:19 CLIENT -> SERVER: MAIL FROM:<irsys.cindacta1@fab.mil.br> 2023-08-26 11:14:19 SERVER -> CLIENT: 250 2.1.0 Ok 2023-08-26 11:14:19 CLIENT -> SERVER: RCPT TO:<wrobynson@gmail.com> 2023-08-26 11:14:19 SERVER -> CLIENT: 554 5.7.1 <unknown[10.229.12.60]>: Client host rejected: Access denied 2023-08-26 11:14:19 SMTP ERROR: RCPT TO command failed: 554 5.7.1 <unknown[10.229.12.60]>: Client host rejected: Access denied 2023-08-26 11:14:19 CLIENT -> SERVER: QUIT 2023-08-26 11:14:19 SERVER -> CLIENT: 221 2.0.0 Bye 2023-08-26 11:14:19 Connection: closed SMTP Error: The following recipients failed: wrobynson@gmail.com: <unknown[10.229.12.60]>: Client host rejected: Access denied
代码实现
$MAIL = new PHPMailer(true); $MAIL->SMTPDebug = 3; $MAIL->SMTPOptions = array( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); $MAIL->From = "irsys.cindacta1@fab.mil.br"; $MAIL->FromName = "SIOP"; $MAIL->Host = "10.52.202.210"; $MAIL->Port = "587"; $MAIL->Username = "irsys.cindacta1@fab.mil.br"; $MAIL->Password = "*******"; $MAIL->SMTPSecure = ""; // 'TLS' or 'SSL': same error try { $MAIL->IsSMTP(); // set mailer to use SMTP $MAIL->IsHTML(true); // set email format to HTML $MAIL->Subject = "Teste de envio de e-mail"; $MAIL->Body = "Esta é uma mensagem de teste."; $MAIL->AddAddress("wrobynson@gmail.com"); $MAIL->AddReplyTo("no-reply@siop1.decea.mil.br", "NAO RESPONDA"); $MAIL->Send(); } catch (Exception $e) { echo $MAIL->ErrorInfo; }
问题分析与解决建议
1. 未触发SMTP认证
从调试日志可见,服务器明确支持AUTH LOGIN PLAIN认证,但代码未开启SMTP认证开关,导致PHPMailer跳过认证步骤直接发送收件人信息,这是日志中无AUTH LOGIN的原因。
修复方法:在代码中添加$MAIL->SMTPAuth = true;,建议放在$MAIL->IsSMTP();之后,确保开启SMTP认证。
2. 客户端主机被拒绝
错误信息<unknown[10.229.12.60]>: Client host rejected: Access denied指向两个可能:
- 发送服务器IP(10.229.12.60)不在SMTP服务器(10.52.202.210)的允许发件白名单内,或被列入黑名单
- 主机名
siop.cindacta1.intraer无法被SMTP服务器反向解析,导致服务器识别为unknown
解决步骤:
- 联系公司邮件系统管理员,确认10.229.12.60是否在SMTP服务器的允许发件列表中
- 检查本地DNS配置,确保
siop.cindacta1.intraer能正常反向解析到10.229.12.60 - 若暂时无法解决解析问题,可尝试添加
$MAIL->Helo = "siop.cindacta1.intraer";,强制指定EHLO发送的主机名,避免服务器识别为unknown
3. 额外配置优化
- 587端口对应
TLS加密,建议将$MAIL->SMTPSecure设置为'tls',开启认证后再测试 - 内部邮件系统场景下可保留当前
SMTPOptions的SSL配置,但外部邮件服务器不建议关闭证书验证
内容的提问来源于stack exchange,提问作者Walter Robynson
相关产品推荐
相关产品推荐

