You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel与Mailgun配置无误但无法发送邮件问题排查

排查Laravel + Mailgun邮件无法送达的问题

嘿,我来帮你梳理下可能遗漏的配置和操作!从你描述的情况来看,虽然请求返回了200,但邮件没送达,这里既有配置细节的问题,也有Mailgun端的关键检查项需要确认:

1. 先修正Curl测试的核心错误

你的Curl请求URL缺少了发送邮件的核心端点/messages,这就是为什么返回"Mailgun Magnificent API"——这是访问Mailgun API根路径的默认响应,根本没触发发送邮件的接口。修正后的URL应该是:

https://api.eu.mailgun.net/v3/a.website.com/messages

改完后再测试,看是否能收到邮件,这能先排除基础接口调用的问题。

2. 修正Laravel配置中的细节错误

  • MAILGUN_DOMAIN格式错误:.env里的MAILGUN_DOMAIN不需要带完整API路径,只需要填你的Mailgun专属域名,比如a.website.com,而不是https://api.mailgun.net/v3/website.com。这个错误会导致Laravel和Mailgun的通信异常,即使Guzzle返回200,也可能是请求到了错误的端点。
  • 端点与区域匹配:你设置的MAILGUN_ENDPOINT=api.eu.mailgun.net,要确保你的Mailgun域名是在欧洲区域创建的。如果域名是在美区创建的,需要改成api.mailgun.net。

3. Mailgun后台的关键检查项

  • 发件人地址必须合规:Mailgun要求发件人地址(from)必须是以下两种之一:
    • 经过验证的域名下的完整邮箱(比如test@a.website.com)
    • Mailgun提供的默认发件地址(比如postmaster@a.website.com,在域名设置页可以找到)
      你测试中用的Testemail是无效格式,必须改成完整邮箱。
  • 查看Mailgun日志:登录Mailgun后台,进入「Logs」页面,这里会显示所有发送请求的详细状态:是被收件人域名拒收?还是触发了反垃圾规则?或者收件人邮箱不存在?日志里的错误信息是定位问题的关键。
  • 验证SMTP模式(备选测试方案):如果API模式一直有问题,可以切换到SMTP模式快速验证连通性:
    在.env中修改配置:
    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.eu.mailgun.org # 欧洲区域,美区用smtp.mailgun.org
    MAIL_PORT=587
    MAIL_USERNAME=postmaster@a.website.com # Mailgun域名的默认SMTP用户名
    MAIL_PASSWORD=你的SMTP密码 # 在Mailgun域名设置页获取
    MAIL_ENCRYPTION=tls
    
    然后发送测试邮件,看是否能成功送达。
  • 检查IP限制:进入Mailgun后台的「Security」页面,确认你的服务器IP没有被加入IP黑名单,或者设置了IP白名单但你的服务器IP不在列表中。

4. Laravel端的调试技巧

  • 查看Laravel日志:打开storage/logs/laravel.log,里面会记录邮件发送的详细错误信息,比如Mailgun返回的具体错误码、参数错误等,比只看Guzzle的200响应更有价值。
  • 发送极简测试邮件:用Mail::raw()写一个无视图的极简测试邮件,排除邮件内容或视图的问题:
    Mail::raw('这是一封测试邮件', function ($message) {
        $message->from('test@a.website.com', '测试发件人');
        $message->to('你的个人邮箱@example.com')->subject('Laravel Mailgun测试');
    });
    

内容的提问来源于stack exchange,提问作者Sprep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:57:35