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

CodeIgniter部署VPS后无法通过Gmail SMTP发送邮件求助

解决CodeIgniter部署VPS后Gmail SMTP邮件验证失效问题

你遇到的这个问题其实挺常见的——本地跑正常,一上VPS就掉链子,大概率是安全限制、网络配置或者细节没踩对,我给你梳理几个排查和解决的方向:

一、先排查Gmail账户的安全限制

现在Gmail对陌生环境的登录管控很严,VPS的IP对Google来说就是陌生地址,这是最常见的原因:

  • 如果你开了两步验证(2FA),必须用**应用专用密码(App Password)**替换代码里的普通密码!普通密码在开启2FA后会直接失效,去Google账户的「安全」板块生成一个App Password,把它填到smtp_pass里。
  • 登录你的Google账户,查看「最近登录活动」,如果有来自VPS IP的登录被标记为“可疑”,手动点击「这是我本人操作」允许该IP的访问。
  • 注意:Gmail已经彻底取消了「允许低安全性应用」的选项,别再找这个设置了,用App Password才是正确路径。

二、检查VPS的网络与端口限制

很多VPS服务商默认会拦截SMTP相关端口,或者机房防火墙限制了出站连接:

  • 在VPS上用命令测试连通性:telnet smtp.gmail.com 465,如果连接超时或失败,说明465端口被封,可以联系服务商开放,或者换用587端口(配置改成smtp_host' => 'tls://smtp.gmail.com', 'smtp_port' => 587)。
  • 检查VPS自身的防火墙(比如ufw、iptables),确保出站的465/587端口是开放状态。

三、修正CodeIgniter的邮件配置细节

你的代码里有个容易踩坑的点,还有优化建议:

  • SMTP协议强制要求用\r\n作为换行符,你的代码里crlf和newline的设置看起来显示是换行,大概率是没写对转义字符,改成下面这样:
    'crlf' => "\r\n",
    'newline' => "\r\n"
    
  • 发件人地址建议用你Gmail账户的邮箱,而不是no-reply@example.com——Gmail会拦截发件人与SMTP账户不一致的请求,把from改成xxx@gmail.com试试。

四、检查PHP环境依赖

确保VPS上的PHP启用了openssl扩展,因为SSL连接完全依赖它:

  • 创建一个phpinfo.php文件,内容是<?php phpinfo(); ?>,访问后搜索openssl,看是否显示enabled。如果没开启,在php.ini里添加extension=openssl,然后重启PHP服务。

五、启用调试信息快速定位问题

在$mail->send();后面加上调试代码,直接看具体的错误提示,比瞎猜高效多了:

if (!$mail->send()) {
    echo $mail->print_debugger();
    exit;
}

调试信息会告诉你是连接超时、认证失败还是邮件内容被拦截,直接锁定根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:44