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

Laravel突然无法通过Mandrill账户发送邮件,SwiftMailer正常求助

排查Laravel无法发送Mandrill邮件的问题

结合你描述的情况——之前正常、单独用SwiftMailer能发但Laravel不行、Mail::failures()无返回,咱们可以从这几个方向逐一排查:

1. 配置缓存未刷新

Laravel会缓存配置文件来提升性能,如果你最近修改过.env或配置文件但没清理缓存,系统可能还在沿用旧的配置。你可以执行这两个命令清除缓存:

php artisan config:clear
php artisan cache:clear

执行后再尝试发送邮件,看是否恢复正常。

2. 邮件驱动配置不匹配(关键排查点)

这里有个容易混淆的细节:Laravel的mandrill驱动是调用Mandrill的API发送邮件,而非SMTP协议。你现在.env里配置了SMTP的MAIL_HOST、MAIL_PORT等参数,但驱动设为mandrill,这其实是不匹配的:

  • 如果你想和单独测试的SwiftMailer一样用SMTP发送,需要把.env里的MAIL_DRIVER改成smtp,保留现有的SMTP配置项,这样Laravel就会用SwiftMailer的SMTP方式和Mandrill通信,和你单独测试的逻辑完全一致。
  • 如果确实想使用Mandrill的API驱动,那不需要SMTP相关配置,只需要确保MANDRILL_SECRET正确,且config/services.php里的配置如下:
'mandrill' => [
    'secret' => env('MANDRILL_SECRET'),
],

同时确认config/mail.php里的驱动配置指向mandrill(Laravel 7+版本是mailers数组)。

3. 邮件队列的隐藏问题

如果你的邮件是通过队列发送的,Mail::failures()不会返回即时错误,因为任务是异步执行的:

  • 先执行php artisan queue:restart重启队列进程,确保队列加载最新配置;
  • 再用php artisan queue:failed查看失败的队列任务,里面可能有具体的错误信息;
  • 检查队列日志,看是否有连接或权限相关的报错。

4. 查看Laravel日志获取细节

Mail::failures()有时候不会暴露底层错误,但Laravel的日志文件会记录更详细的信息。你可以打开storage/logs/laravel.log,搜索和邮件相关的条目,比如mandrill、SwiftMailer、send等关键词,大概率能找到失败的具体原因(比如API密钥无效、请求频率超限、Mandrill账户状态异常等)。

5. Mandrill账户或API状态检查

虽然你用SMTP能发,但Mandrill的API可能存在单独的限制:

  • 检查Mandrill后台的API密钥是否有效,有没有被禁用;
  • 查看账户是否有发送量超限、违规记录等导致API无法使用的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:37:34