CodeIgniter3下PHPMailer使用SMTP在cPanel环境发信失败如何解决
问题解决方案
- 首先排查cPanel出站端口限制
绝大多数cPanel主机服务商默认会封禁587、465等第三方SMTP服务的出站端口,你可以先运行以下测试代码验证端口连通性:
如果提示端口不通,直接联系主机商开放对应端口,或者改用你的cPanel账号下自建域名邮箱的SMTP服务(通常地址为smtp.你的域名,端口默认25无需额外申请)。<?php $test = fsockopen('smtp.gmail.com', 587, $errno, $errstr, 10); if (!$test) { echo "端口不通,错误:$errstr ($errno)"; } else { echo "端口连通正常"; fclose($test); } ?> - 修正Gmail账号授权配置
目前Gmail已不再支持直接使用账号密码作为SMTP登录凭证,你需要先为Google账号开启两步验证,然后生成应用专用密码替换代码里的Password字段。另外服务器IP属于新的登录环境,你需要登录Google账号安全中心,确认是否有异地登录拦截提示,放行服务器IP的访问请求。 - 补充PHPMailer兼容配置
cPanel环境的SSL证书校验规则可能和本地环境不同,你可以在$mail->isSMTP();后增加以下配置,解决证书校验导致的连接失败问题:// 关闭自动TLS校验(按需开启) $mail->SMTPAutoTLS = false; // 配置SSL兼容选项 $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); - 修正发件人配置错误
你代码中的setFrom参数填写的是noreply.com,不符合邮箱格式规范,必须填写完整的发件人邮箱地址,且建议和SMTP登录的Gmail邮箱保持一致,避免被Gmail或cPanel发信规则拦截。
内容的提问来源于stack exchange,提问作者Sylvia Helmi
相关产品推荐
相关产品推荐

