2022年5月30日后Laravel 5.8无法发送邮件如何修复
Laravel 5.8 2022年5月30日后邮件发送异常修复方案
故障根因
2022年5月30日全球主流邮件服务商统一下线TLS1.0/1.1加密协议支持,国内云厂商同步默认封禁云服务器25端口的非加密出站连接,Laravel 5.8内置的SwiftMailer组件默认未强制指定TLS1.2加密版本,原有旧配置无法适配新的服务规则,直接导致此前正常的邮件发送功能突发失效。
修复步骤
- 调整.env邮件配置
打开项目根目录下的.env文件,替换原有邮件相关配置为以下内容,所有参数不要带多余空格、引号:
不要使用25端口,目前国内云服务器25端口默认封禁,几乎无法申请解封;加密方式不要填tls或留空,必须指定为ssl对应465端口。MAIL_DRIVER=smtp MAIL_HOST=填写你使用的SMTP服务地址(如腾讯企业邮填smtp.exmail.qq.com、163邮箱填smtp.163.com) MAIL_PORT=465 MAIL_USERNAME=完整发件邮箱账号 MAIL_PASSWORD=邮箱对应的SMTP授权码(并非邮箱登录密码,需在邮箱后台单独开启SMTP服务获取) MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=完整发件邮箱账号 MAIL_FROM_NAME=站点发件人显示名称 - 清除项目配置缓存
进入项目根目录,在命令行依次执行以下命令,清除Laravel缓存的旧配置:php artisan config:clear php artisan cache:clear - 强制指定TLS1.2版本(前两步完成后仍报错时操作)
打开项目config/mail.php文件,找到smtp驱动对应的stream配置项,新增TLS版本强制指定参数,修改后内容如下:
修改完成后再次执行'stream' => [ 'ssl' => [ 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT, ], ],php artisan config:clear重载配置。 - 连通性校验
在服务器命令行执行telnet命令测试SMTP端口连通性,确认服务器出站465端口未被防火墙、安全组拦截:
连通正常时会返回SMTP服务的欢迎banner,此时触发邮件发送即可恢复正常。telnet 你填写的SMTP服务地址 465
常见踩坑提示:部分开发者会误以为是Laravel框架版本问题尝试升级框架,完全没有必要,按上述步骤调整配置即可兼容,升级框架反而可能引入更多兼容问题。
内容的提问来源于stack exchange,提问作者Bradon
相关产品推荐
相关产品推荐

