Laravel在Linode共享主机上无法通过Gmail SMTP发送邮件
问题根因判定
本地测试发送正常,说明你贴出的Gmail SMTP配置参数本身没有错误,部署到Linode共享主机后报连接超时,本质是主机侧无法与ssl://smtp.gmail.com:465建立TCP链路,问题和Laravel框架逻辑、Gmail账号配置无关。
排查步骤
按优先级从高到低排查:
- 主机出站端口连通性验证
先通过SSH登录Linode共享主机,直接用系统命令测试端口连通性,排除框架层干扰:
执行以下任意一条命令即可:telnet smtp.gmail.com 465nc -zv smtp.gmail.com 465
如果命令执行后长时间无响应最终提示超时,可直接确认是主机侧拦截了对应端口的出站请求。 - 主机防火墙/安全规则检查
Linode部分共享主机节点默认会拦截25、465、587等常用SMTP端口的出站流量,目的是防范主机被用于滥发垃圾邮件,你可以先在主机管理面板检查出站防火墙规则,确认是否放行了465端口的TCP请求。 - PHP环境依赖检查
执行php -m | grep openssl确认当前运行Laravel的PHP版本已启用openssl扩展,同时检查php.ini配置中的disable_functions列表,确认stream_socket_client、fsockopen等网络请求函数未被禁用。这类问题一般会报SSL握手失败而非连接超时,排查优先级最低。
解决方案
- 端口拦截类问题
先尝试切换Gmail SMTP的备用端口配置,将.env中邮件参数修改为如下内容:
修改完成后在项目根目录执行MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=example@gmail.com MAIL_PASSWORD=secret MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=example@gmail.com MAIL_FROM_NAME="${APP_NAME}"php artisan config:clear清除Laravel配置缓存,再测试发信。
如果587端口同样被拦截,直接提交工单给Linode客服,说明你的业务发信场景,申请解除SMTP端口的出站限制即可,提交时附上你的业务用途说明,避免被判定为垃圾邮件发送请求。 - 环境依赖类问题
在主机PHP配置面板中启用openssl扩展,从disable_functions列表中移除被禁用的网络相关函数,保存后重启PHP服务即可恢复。 - 注意:你本地已经测试发信正常,说明Gmail账号侧的应用密码配置已经符合要求,不需要重复调整Gmail账号的安全设置。
内容的提问来源于stack exchange,提问作者Inferno
相关产品推荐
相关产品推荐

