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

Windows Server上用Laravel发邮件遇fwrite() SSL连接强制关闭问题

Laravel + Windows Server 发送Office365邮件报错解决方案

针对你遇到的fwrite(): SSL: An existing connection was forcibly closed by the remote host报错,按以下步骤排查解决:

  • 检查PHP OpenSSL配置与版本

    1. 打开php.ini,确认extension=openssl未被注释,启用OpenSSL扩展
    2. 运行命令php -r "echo OPENSSL_VERSION_TEXT;"查看版本,Office365要求TLS 1.2及以上,低于该版本需升级PHP或OpenSSL库
  • 修正Laravel邮件配置
    Laravel 6+版本已弃用MAIL_DRIVER,改用MAIL_MAILER,同时补充认证模式配置,修改后的完整配置如下:

    MAIL_MAILER=smtp
    MAIL_HOST=outlook.office365.com
    MAIL_PORT=587
    MAIL_USERNAME=hr@testemail.com
    MAIL_PASSWORD=xxxx
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=hr@testemail.com
    MAIL_FROM_NAME="${APP_NAME}"
    MAIL_AUTH_MODE=login
    
  • 启用Windows Server的TLS协议
    通过注册表编辑器启用TLS 1.2和1.3:

    1. 定位路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
    2. 新建TLS 1.2\Client项,设置DisabledByDefault为0,Enabled为1
    3. 新建TLS 1.3\Client项,设置DisabledByDefault为0,Enabled为1
    4. 重启服务器生效
  • 直接测试SMTP连接
    用PowerShell绕过Laravel测试连接,定位问题层面:

    $smtpClient = New-Object Net.Mail.SmtpClient('outlook.office365.com', 587)
    $smtpClient.EnableSsl = $true
    $smtpClient.Credentials = New-Object System.Net.NetworkCredential('hr@testemail.com', 'xxxx')
    $smtpClient.Send('hr@testemail.com', 'test@example.com', 'Test Subject', 'Test Body')
    

    若命令报错,说明是系统/网络问题;若成功,继续排查Laravel配置缓存

  • 清除Laravel配置缓存
    运行命令刷新配置:

    php artisan config:clear
    php artisan config:cache
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:17:08