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

Laravel 9部署Linux主机后无法连接SMTP服务器发送邮件问题

问题分析与解决方案

核心原因判断

报错Network is unreachable说明你的Linux主机根本无法建立到SMTP服务器的网络连接,和Laravel配置、邮箱账号权限关系不大,重点排查主机的网络限制。

具体排查步骤

  • 直接在主机上测试SMTP端口连通性
    登录Linux主机,用telnet或nc命令验证端口是否能通:

    # 测试Gmail 587端口
    telnet smtp.gmail.com 587
    # 或者用nc命令
    nc -zv smtp.gmail.com 587
    

    如果返回“Connection refused”或“Network is unreachable”,实锤主机网络被限制。

  • 检查主机防火墙/安全组规则
    多数云服务商(如阿里云、腾讯云)默认封禁出站的25、587、465端口,需要去服务商的安全组控制台手动开启这些端口的出站权限。另外主机本地的iptables或ufw防火墙也可能拦截,可临时关闭测试:

    # Ubuntu/Debian系统关闭ufw
    sudo ufw disable
    # CentOS/RHEL系统关闭firewalld
    sudo systemctl stop firewalld
    

    测试完成后记得重新开启防火墙,别留安全隐患。

  • 确认主机运营商是否封禁SMTP端口
    部分虚拟主机或廉价VPS运营商会封禁外部SMTP出站端口,强制用户使用自家邮件服务。直接联系服务商确认是否有端口限制。

  • 改用主机服务商自带的SMTP服务
    如果是运营商封禁了外部端口,换成主机服务商提供的SMTP(比如cPanel内置SMTP、阿里云企业邮箱SMTP),一般能绕过限制。

  • 再次确认Laravel配置缓存
    虽然你说清过缓存,但再执行一遍确保配置生效:

    php artisan config:clear
    php artisan cache:clear
    php artisan route:clear
    

    也可以在控制器里临时打印env('MAIL_HOST'),确认加载的是.env里的正确配置。

代码小优化建议

你的ContactFormMessage里直接调用env()函数,建议改成读取配置文件:在config/mail.php里添加'admin_contact' => env('APP_ADMIN_CONTACT'),然后邮件类里用config('mail.admin_contact'),这样配置缓存后也能正常读取。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:11:09