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

Laravel8部署正式服务器后SMTP邮件证书CN不匹配报错排查

报错根因

你遇到的stream_socket_enable_crypto(): Peer certificate CN=<hostname> did not match expected CN=smtp-relay.sendinblue.com错误,本质是SMTP建立TLS加密连接时,对方返回的SSL证书绑定的域名和你请求连接的域名不匹配。本地Windows环境正常、上线后报错,问题基本出在服务器端的配置缓存、网络链路、系统证书环境上,你贴出的Laravel邮件配置本身没有语法错误。

排查步骤(按优先级从高到低)

  • 第一步:清除Laravel配置缓存
    服务器部署后如果没有执行配置清理命令,Laravel会读取旧的缓存配置,很可能之前残留的旧SMTP主机配置还在生效,实际连接的根本不是Sendinblue的SMTP服务器。直接在项目根目录执行以下命令:

    php artisan config:clear
    php artisan cache:clear
    

    清理完成后重试发信,看是否恢复正常。

  • 第二步:排查服务器网络链路问题
    这是该报错最高发的原因:服务器DNS被污染、出口防火墙/代理劫持了SMTP流量,导致你请求smtp-relay.sendinblue.com时实际连到了别的服务器,对方返回的证书自然和预期域名不匹配。

    1. 先在服务器执行域名解析测试,确认解析结果正确:
      nslookup smtp-relay.sendinblue.com
      
      如果返回的IP不属于Sendinblue官方IP段,直接换服务器DNS为公共DNS(比如1.1.1.1、8.8.8.8)再重试。
    2. 直接用openssl测试TLS连接,绕过Laravel验证链路:
      openssl s_client -connect smtp-relay.sendinblue.com:587 -starttls smtp
      
      查看输出中subject字段的CN值,如果不是smtp-relay.sendinblue.com,可以确定是网络劫持问题,联系服务器运营商/网络管理员放开587端口的流量拦截,关闭SMTP流量劫持即可。
  • 第三步:更新服务器系统CA证书包
    如果openssl测试返回的证书CN确实是smtp-relay.sendinblue.com,那问题出在服务器的根证书库过旧,无法正确校验Sendinblue的证书链:

    • CentOS/RHEL系统执行:
      yum update ca-certificates -y
      
    • Debian/Ubuntu系统执行:
      apt update && apt install --reinstall ca-certificates -y
      

    更新完成后重启php-fpm、Web服务再测试发信。

注意事项

绝对不要为了快速修复直接在SMTP配置中加'verify_peer' => false关闭证书校验,这种方式会完全失去TLS加密的防护能力,存在邮箱账号泄露、邮件内容被窃听的中间人攻击风险,仅可用于临时测试,生产环境严禁使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:54:21