Laravel 8配置Mailgun+队列发邮件失败:SSL版本错误排查
嘿,我看了你的问题和配置,确实能发现几个关键的配置问题,导致了这个SSL连接错误,咱们一步步来解决:
问题分析与修复步骤
1. 核心问题:SMTP配置不匹配 + 驱动模式混淆
你当前的配置里存在两个关键矛盾:
- 你在
.env里用了MAIL_PORT=2525却搭配MAIL_ENCRYPTION=ssl,这完全不匹配——Mailgun的SMTP端口和加密方式是绑定的,错配就会触发你看到的ssl3_get_record:wrong version number错误。 - 你在
config/mail.php(应该是笔误写成config/email了吧?)里配置了mailgun驱动,但没在.env里把默认邮件驱动改成mailgun,所以Laravel还是在走有问题的SMTP通道。
2. 两种修复方案,选一种就行
方案一:改用Mailgun API模式(推荐,更稳定)
这是Mailgun官方最推荐的方式,完全绕开SMTP的SSL问题:
- 编辑你的
.env文件,修改核心配置:MAIL_MAILER=mailgun MAILGUN_DOMAIN=sandbox___xxxxx_____________.mailgun.org MAILGUN_SECRET=secret___xxxxxxxxxxxxxxxxx______ # 下面这些SMTP相关的可以注释掉,因为API模式用不上 # MAIL_HOST=smtp.mailgun.org # MAIL_PORT=2525 # MAIL_ENCRYPTION=ssl # MAIL_USERNAME= # MAIL_PASSWORD= - 确认
config/mail.php里的mailgun驱动配置正确(如果是欧盟区的Mailgun,记得把endpoint改成api.eu.mailgun.net):'mailers' => [ // ...保留其他驱动配置 'mailgun' => [ 'transport' => 'mailgun', 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), ], ], // 确保默认驱动指向mailgun 'default' => env('MAIL_MAILER', 'mailgun'), - 清除配置缓存,让新配置生效:
php artisan config:clear php artisan config:cache
方案二:修复SMTP模式的配置
如果你一定要用SMTP,就得把端口和加密方式配正确,还要注意SMTP的用户名密码和API密钥不是一回事:
- 修正
.env的SMTP配置:MAIL_MAILER=smtp MAIL_HOST=smtp.mailgun.org MAIL_PORT=587 MAIL_ENCRYPTION=tls # SMTP用户名是postmaster@你的沙箱域名,比如下面这样 MAIL_USERNAME=postmaster@sandbox___xxxxx_____________.mailgun.org # SMTP密码是Mailgun控制台里SMTP页面的专用密码,不是你的API密钥! MAIL_PASSWORD=你的Mailgun SMTP密码 - 同样要清除配置缓存:
php artisan config:clear php artisan config:cache
3. 额外要检查的点
- 沙箱模式下,Mailgun只允许发送给已经在控制台授权过的收件人邮箱,别忘确认这一点。
- 队列任务要正常运行:开发环境可以用
php artisan queue:listen,生产环境用php artisan queue:work(记得配守护进程)。 - 本地环境有没有防火墙、代理拦截了Mailgun的请求?可以试试用curl访问
api.mailgun.net或者telnet连smtp.mailgun.org 587测试连通性。
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

