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

如何在Laravel应用中正确配置Mailgun?邮件发送失败求助

解决Laravel Mailgun邮件无法发送的问题及正确配置指南

嘿,咱们来搞定你遇到的这个Mailgun配置问题——你踩了一个超常见的小坑!从你给出的.env配置来看,核心问题出在MAILGUN_DOMAIN的取值上,下面一步步帮你修正并梳理正确的配置流程:

第一步:修正.env的核心错误

你现在把MAILGUN_DOMAIN填成了完整的API URL,但这个配置项只需要填写你的Mailgun专属域名(沙箱环境是sandboxxxxxxxxxxxxxxx.mailgun.org格式,生产环境就是你自己绑定的域名),不需要带https://api.mailgun.net/v3/前缀。

修正后的.env配置示例(区分Laravel版本):

Laravel 6.x及以上版本

MAIL_MAILER=mailgun
MAILGUN_DOMAIN=sandboxxxxxxxxxxxxxxx.mailgun.org
MAILGUN_SECRET=key-xxxxxxxxxxxxxx
MAIL_FROM_ADDRESS=你在Mailgun验证过的邮箱@xxx.com
MAIL_FROM_NAME="${APP_NAME}"

Laravel 5.x版本

MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=sandboxxxxxxxxxxxxxxx.mailgun.org
MAILGUN_SECRET=key-xxxxxxxxxxxxxx
MAIL_FROM_ADDRESS=你在Mailgun验证过的邮箱@xxx.com
MAIL_FROM_NAME="${APP_NAME}"

划重点:Laravel 6+把MAIL_DRIVER改成了MAIL_MAILER,别搞错版本对应关系!

第二步:完成必要的后续检查

  • 清除配置缓存:修改.env后必须执行这两个命令,避免Laravel读取旧的缓存配置:
    php artisan config:clear
    php artisan cache:clear
    
  • 核对密钥和域名:去Mailgun后台确认MAILGUN_SECRET是你的API密钥(开头是key-),域名是后台显示的完整沙箱/自定义域名,不要漏写后缀。
  • 验证收件邮箱:沙箱环境下,只有你在Mailgun后台添加并验证过的邮箱才能收到测试邮件,未验证的邮箱会被Mailgun静默拦截,而且Laravel不会抛出错误(因为请求已经成功发送到Mailgun服务器了)。
  • 快速测试邮件发送:可以临时加个路由测试:
    Route::get('/test-mail', function () {
        \Illuminate\Support\Facades\Mail::raw('这是Laravel Mailgun的测试邮件', function ($message) {
            $message->to('你的验证邮箱@xxx.com')
                    ->subject('Laravel Mailgun测试');
        });
        return '邮件已发送,请去收件箱或垃圾邮件文件夹查看!';
    });
    

访问这个路由后,去Mailgun后台的「Logs」页面查看发送记录,如果有记录但收件箱没收到,大概率是邮件被归类为垃圾邮件,或者需要检查收件邮箱的设置。

额外注意事项

  • 如果你用的是Laravel 9及以上版本,确保已经安装了Guzzle HTTP客户端(Laravel默认会带,但如果没装的话执行这个命令):
    composer require guzzlehttp/guzzle
    
  • 生产环境部署时,记得把沙箱域名换成你自己在Mailgun绑定并验证过的域名,同时配置好DKIM、SPF等DNS记录,这能大幅提升邮件的送达率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:37:27