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

macOS下Laravel调用postfix smtp发信无报错未送达问题求助

问题根因

你项目的核心错误出在config/mail.php的SMTP邮件器配置项:你当前配置的'transport' => 'mail'是错误值,SMTP传输对应的正确驱动值为smtp。
该错误会导致Laravel完全忽略.env中填写的所有SMTP配置项,直接调用macOS系统自带的Postfix邮件服务发信,因此你修改SMTP参数、填写错误凭证都不会触发Laravel层面的报错,错误全部被Postfix服务静默吞掉。你看到Little Snitch提示/usr/libexec/postfix/smtp请求网络,正是Laravel调用系统Postfix发信的表现。


获取发信日志的方法

1. 系统Postfix日志

macOS下Postfix服务的默认日志路径为/var/log/mail.log,执行以下命令即可实时查看发信请求的详细报错:

tail -f /var/log/mail.log

你之前所有发信失败的原因都会记录在该日志文件中。

2. Laravel层面捕获异常

如果切换回Laravel的SMTP驱动后需要更明确的报错信息,可以在发信逻辑外层加异常捕获,代码示例如下:

use Swift_TransportException;

// 原有发信逻辑外层套try catch
try {
    Mail::send(['html' => 'emails.testMail'], $data,
        function ($message) use ($email, $data) {
            $message->to($email)->subject($data['title']);
    });
} catch (Swift_TransportException $e) {
    // 打印SMTP交互的完整错误信息
    dd($e->getMessage());
}

修复步骤

  1. 修改config/mail.php中smtp邮件器的transport配置:
// 原错误配置
// 'transport' => 'mail',
// 修改为正确值
'transport' => 'smtp',
  1. 执行配置清理命令,确保配置生效:
php artisan config:clear
  1. 验证配置是否正确加载:可以临时写一个测试路由打印配置,确认参数符合预期:
Route::get('/test-mail-config', function () {
    dd(config('mail.mailers.smtp'));
});
  1. 重新测试发信即可,此时如果SMTP配置存在问题,Laravel会直接抛出对应错误,不会再静默失败。

额外提示:如果使用Gmail发信,需要先开启账号的两步验证,然后生成应用专用密码,将应用专用密码填入MAIL_PASSWORD字段才可以正常发信,直接使用账号密码会被Gmail拦截。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:15:04