Laravel未使用配置的邮件主机 报错SSL版本号错误如何解决
Laravel 邮件配置异常问题排查解决步骤
1. 定位配置读取异常原因
你实际读取到的SMTP主机和.env配置不符,优先排查配置覆盖问题:
- 检查项目根目录是否存在
.env.local、.env.${APP_ENV}这类环境专属配置文件,Laravel会优先加载这类文件的配置,覆盖默认.env的同名参数 - 全局搜索项目代码,排查是否有服务提供者、中间件、第三方扩展包的配置文件里硬编码了
smtp.hostinger.com,强制覆盖了mail配置项 - 检查本地/服务器的hosts解析规则,确认是否存在
smtp.mailtrap.io的强制指向规则,导致实际请求被转发到hostinger的SMTP服务器 - 临时在路由中加入测试代码
dd(config('mail.mailers.smtp.host')),访问路由打印实际生效的配置值,确认配置读取链路是否正常
2. 彻底清理所有类型缓存
常规缓存清理不全也会导致配置不生效,执行完整清理命令:
# 清理配置缓存 php artisan config:clear # 清理应用缓存 php artisan cache:clear # 清理路由缓存 php artisan route:clear # 清理视图缓存 php artisan view:clear
如果你使用了队列异步发送邮件,必须重启队列进程:队列启动时会一次性加载所有配置,修改配置后不重启队列永远会用旧配置,执行命令:
php artisan queue:restart
生产环境可以在清理完缓存后重新生成配置缓存:php artisan config:cache,本地开发环境不需要执行该命令,避免修改配置不生效。
3. 解决SSL版本报错问题
配置修正为mailtrap后如果仍报SSL错误,按以下方案调整:
- 首先确认mailtrap的端口和加密配置匹配:你当前配置的2525端口搭配
tls加密是官方推荐配置,如果报错可以尝试将.env中的MAIL_ENCRYPTION改为null,mailtrap的2525端口也支持非加密传输 - 如果还是报错,在
config/mail.php的smtp配置中新增stream参数,放宽SSL校验规则:
'smtp' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, // 新增以下SSL配置 'stream' => [ 'ssl' => [ 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ], ], ],
内容的提问来源于stack exchange,提问作者Ogunleye Oluwatosin
相关产品推荐
相关产品推荐

