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

使用PHPMailer通过AWS SES SMTP发件:终端正常浏览器无法连接SMTP

解决PHPMailer调用AWS SES SMTP在浏览器中发送失败的问题

这种终端能正常发邮件、浏览器访问就报错的情况,核心原因基本是CLI命令行环境和Web服务器(Apache/Nginx)环境的配置/权限差异,给你梳理几个关键排查方向:

  • 检查Web服务器的网络出站权限
    终端能连AWS SES的587端口不代表Web服务器进程也能连。你可以在服务器上切换到Web服务器的运行用户(比如www-data),执行这个命令测试连通性:

    curl -v telnet://email-smtp.us-east-1.amazonaws.com:587
    

    如果连接失败,大概率是服务器防火墙、安全组或者机房网络规则限制了587端口的出站请求,需要调整对应规则开放这个端口。

  • 验证PHP环境的配置差异
    CLI和Web环境用的可能是不同的php.ini配置:

    • 检查Web环境是否禁用了PHPMailer依赖的网络函数:在浏览器中运行phpinfo(),搜索disable_functions,看看fsockopen或stream_socket_client是否在禁用列表里,如果是,修改对应php.ini移除禁用项并重启Web服务器。
    • 排查TLS证书验证问题:Web环境的CA证书可能不完整,导致TLS握手失败。可以先临时添加这段代码测试(生产环境不建议长期使用):
      $mail->SMTPOptions = array(
          'ssl' => array(
              'verify_peer' => false,
              'verify_peer_name' => false,
              'allow_self_signed' => true
          )
      );
      
      如果测试能发送成功,说明是CA证书问题,需要给Web服务器配置正确的根证书(比如安装官方的CA证书包)。
  • 核对AWS SES的相关配置

    • 确认你的AWS SES处于生产模式,或者收件地址已经在沙箱模式下完成验证(沙箱模式下只能给已验证的地址发邮件)。
    • 登录AWS SES控制台,查看发送日志和错误报告,有没有Web服务器IP被拒绝的记录,或者身份验证相关的报错。
  • 查看Web服务器的错误日志
    PHPMailer的SMTP Debug信息可能不够详细,去查看Apache的error.log或者Nginx的error.log,还有PHP的错误日志,里面会记录更底层的网络连接错误,比如超时、证书不匹配等具体原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:17:54