DirectAdmin服务器上CakePHP网站Gmail SMTP发件报错求助
解决CakePHP在DirectAdmin服务器上Gmail SMTP连接失败问题
针对你遇到的stream_socket_client(): Unable to connect to tcp://smtp.gmail.com:587 (Network is unreachable)错误,按以下步骤排查解决:
1. 检查服务器出站端口是否开放
服务器可能封禁了587端口,先在服务器终端执行以下命令测试连通性:
telnet smtp.gmail.com 587 # 或者用nc命令 nc -zv smtp.gmail.com 587
如果返回无法连接,需要:
- 联系DirectAdmin主机商开放587(或465)出站端口
- 若自己管理防火墙,添加规则允许出站流量到587端口:
- iptables:
iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT - firewalld:
firewall-cmd --add-port=587/tcp --permanent && firewall-cmd --reload
- iptables:
2. 更换Gmail认证方式为App Password
目前Gmail已不再支持普通密码用于SMTP登录,必须使用App Password(需先开启账号2步验证):
- 登录Gmail账号,开启2步验证
- 进入Google账号安全设置,找到"App Passwords"选项,生成对应App的密码
- 将CakePHP配置中的
password字段替换为生成的App Password
3. 修正CakePHP邮件配置
确保配置没有冲突,调整后的EmailTransport配置建议如下:
'EmailTransport' => [ 'default' => [ 'host' => 'localhost', 'port' => 25, 'username' => null, 'password' => null, 'client' => null, 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), ], 'gmail' => [ 'host' => 'smtp.gmail.com', 'port' => 587, 'username' => 'dummy@gmail.com', 'password' => '你的App Password', 'className' => 'Smtp', 'tls' => true, 'client' => null, 'url' => null, // 移除可能覆盖配置的环境变量引用 ], ],
同时确认Email配置已切换到gmail传输:
'Email' => [ 'default' => [ 'transport' => 'gmail', 'from' => ['dummy@gmail.com' => '你的站点名称'], ], ],
4. 检查服务器DNS解析
测试服务器能否正常解析Gmail SMTP地址:
nslookup smtp.gmail.com # 或者 dig smtp.gmail.com
如果解析失败,修改服务器DNS配置为公共DNS(如8.8.8.8、1.1.1.1),在DirectAdmin的服务器设置中更新DNS服务器地址。
5. 尝试切换到465端口(SSL协议)
若587端口始终无法连通,改用465端口的SSL连接,修改gmail传输配置:
'gmail' => [ 'host' => 'smtp.gmail.com', 'port' => 465, 'username' => 'dummy@gmail.com', 'password' => '你的App Password', 'className' => 'Smtp', 'ssl' => true, 'client' => null, 'url' => null, ],
内容的提问来源于stack exchange,提问作者winnie
相关产品推荐
相关产品推荐

