Laravel使用Mailgun SMTP发送邮件验证失败问题求助
我之前也碰到过类似的Mailgun SMTP认证坑,结合你的报错信息和配置,咱们一步步来排查解决:
问题排查与解决方案
1. 修正Mailgun SMTP核心凭证(最可能的根因)
你现在.env里填的MAIL_USERNAME=email@sub.domain.com是自己服务器创建的邮箱,但Mailgun的SMTP认证根本不需要用你自己搭建的邮箱账号——它需要的是Mailgun后台给你的专属SMTP凭证:
- 登录Mailgun控制台,找到你配置的
sub.domain.com域名; - 进入该域名的「SMTP Credentials」页面,复制官方给出的
Username(一般是postmaster@sub.domain.com)和对应的Password; - 把
.env里的MAIL_USERNAME和MAIL_PASSWORD替换成这两个值,别再用自己服务器的邮箱账号了。
2. 调整SMTP端口与加密方式
端口25很容易被服务器或运营商拦截,Mailgun官方推荐用更稳定的配置:
MAIL_PORT=587 MAIL_ENCRYPTION=tls
如果想用SSL加密,也可以这么配:
MAIL_PORT=465 MAIL_ENCRYPTION=ssl
别把MAIL_ENCRYPTION设为null,不安全的连接大概率会被Mailgun拒绝。
3. 清除Laravel配置缓存
修改.env后,Laravel经常会缓存旧配置,导致新设置不生效,执行这两条命令刷新:
php artisan config:clear php artisan cache:clear
4. 确认Mailgun域名已完成验证
登录Mailgun后台,检查sub.domain.com的DNS状态:
- 确认MX记录正确指向Mailgun的服务器;
- 确认SPF、DKIM这两条TXT记录已经配置并生效;
未完成验证的域名会被Mailgun限制发送,直接导致认证失败。
5. 排查本地邮件服务干扰
你的服务器日志里出现dovecot的认证错误有点反常——毕竟你配置的是Mailgun的SMTP服务器,理论上不该连接到本地的dovecot。可以做这几个检查:
- 再核对一遍
.env里的MAIL_HOST确实是smtp.mailgun.org,没被其他配置文件覆盖; - 检查服务器防火墙是否允许出站连接到
smtp.mailgun.org的587/465端口; - 暂时关闭本地的dovecot服务,测试是否还会出现该日志,排除本地服务干扰的可能。
内容的提问来源于stack exchange,提问作者Hkm Sadek
相关产品推荐
相关产品推荐

