Laravel 8配置Mailgun+队列发邮件失败,求排查SSL连接错误
问题分析与解决方案
我来帮你排查这个邮件发送失败的问题,你遇到的ssl3_get_record:wrong version number错误,核心原因是邮件驱动配置不匹配,或者SMTP端口与加密方式不兼容。结合你的配置来看,主要有两个关键点需要修正:
1. 确认是否使用Mailgun API驱动(推荐方式)
你提到要使用Mailgun API发送邮件,但当前配置可能仍在默认使用SMTP驱动,没有切换到Mailgun API驱动:
- 检查
.env文件,确保设置默认邮件驱动为mailgun:MAIL_MAILER=mailgun - 使用Mailgun API驱动时,不需要设置
MAIL_HOST、MAIL_PORT、MAIL_ENCRYPTION这些SMTP相关参数——因为API驱动直接调用Mailgun的HTTP接口,不走SMTP连接。你.env里保留的MAIL_PORT=2525和MAIL_ENCRYPTION=ssl,反而会在默认驱动为SMTP时干扰配置。
2. 如果坚持使用Mailgun SMTP驱动(不推荐API时)
如果你的需求是用Mailgun的SMTP服务而非API,那必须修正端口与加密方式的匹配:
- Mailgun SMTP的端口规则很明确:
- 端口
587或2525对应加密方式TLS - 端口
465对应加密方式SSL
- 端口
- 你的
.env里设置了MAIL_PORT=2525却用MAIL_ENCRYPTION=ssl,这直接导致了SSL握手版本不匹配的错误。修正方式二选一:
或者# 方式一:2525端口搭配TLS MAIL_PORT=2525 MAIL_ENCRYPTION=tls# 方式二:465端口搭配SSL MAIL_PORT=465 MAIL_ENCRYPTION=ssl
3. 必要的缓存清理与队列重启
不管用哪种驱动,修改配置后都要执行以下操作确保配置生效:
- 清除配置缓存:
php artisan config:clear php artisan cache:clear - 重启队列工作进程(队列进程会缓存旧配置,必须重启才会加载新配置):
php artisan queue:restart
额外检查点
- 确认
MAILGUN_DOMAIN和MAILGUN_SECRET是Mailgun控制台提供的正确值(你的sandbox域名格式是对的,没问题) - 如果你在本地环境,确保没有防火墙或代理阻止了Mailgun的连接(API接口是
api.mailgun.net,SMTP是smtp.mailgun.org)
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

