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

Laravel队列在Postman中正常,浏览器调用API执行Job失败求助

问题描述

我有一个通过Laravel Job发送邮件的API:

  • Postman直接调用myapi.test/api/v1/test时,Job正常执行,邮件发送成功。
  • 从其他项目的按钮调用该API时,Job无法执行,调试日志报错:

    Expected response code "250" but got code "530", with message "530 5.7.1 Authentication required"

相关代码片段:

控制器test方法

public function test()
{
    $data['pass'] = 'FnJKfkuG';
    $data['name'] = 'Gordon';
    $data['route'] = 'myapi.test/validate-email/jQZSPFSZLuBqAdQofxtV5Bw2TK4ZcrNmoxFFR5ZvgGM48gHyKcxv7y6jHBaZhHIF';
    $data['email'] = 'abc@gmail.com';
    $data['title'] = 'Hi!!';
    $data['body'] = 'Text here.';
    SendEmailJob::dispatch('', $data,'','', $data['email'],'welcome');
}

SendEmailJob中的sendMail函数

sendMail($this->mailto, 'Confirmación de solicitud', 'newRequest', $this->data, 'mi correo');

function sendMail($mailTo, $subject, $view, $data, $from)
{
    try {
        Mail::to($mailTo)->send(new SendMail($from, $data, $view, $subject));
        return sendResponse('Ok');
    } catch (\Exception $e) {
        Log::debug($e->getMessage());
        return sendExceptionError('Error 2',$e->getMessage());
    }
}

SendMail为Laravel的Mailable类。


解决方案

1. 检查队列Worker的环境配置

Laravel队列Worker启动时会加载当前环境的.env配置,如果Worker运行环境和API请求环境不一致,会导致SMTP配置错位:

  • 重启队列Worker时指定对应环境:
    php artisan queue:restart --env=testing
    # 替换testing为你的实际环境,比如local/production
    
  • 验证CLI环境和API环境是否一致:执行php artisan env查看CLI环境,同时在API接口中返回env('APP_ENV')进行对比。

2. 验证SMTP配置的一致性

检查API所在服务器的.env文件中邮件配置是否正确,重点确认以下字段:

MAIL_MAILER=smtp
MAIL_HOST=你的SMTP主机地址
MAIL_PORT=587
MAIL_USERNAME=你的SMTP账号
MAIL_PASSWORD=你的SMTP密码
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=发件邮箱
MAIL_FROM_NAME="${APP_NAME}"
  • 可以在sendMail函数中临时添加日志,验证Job执行时的SMTP配置:
    Log::debug('SMTP运行时配置:', [
        'username' => env('MAIL_USERNAME'),
        'host' => env('MAIL_HOST'),
        'port' => env('MAIL_PORT')
    ]);
    
    对比Postman调用和跨项目调用时的日志,确认配置是否存在差异。

3. 检查SMTP服务器的IP白名单

部分SMTP服务商(如Gmail、企业邮箱)会限制发送IP,若Postman所在IP在白名单内,而其他项目服务器IP不在,会触发认证失败:

  • 登录SMTP服务商后台,将其他项目服务器的公网IP添加到IP白名单。
  • 若使用Gmail,需确保开启「不太安全的应用访问」或使用App Password进行认证。

4. 重启队列Worker加载最新配置

Laravel队列Worker启动后不会自动刷新环境变量,若.env配置在Worker启动后被修改,需强制重启:

php artisan queue:restart

5. 排查请求头的配置干扰

部分自定义请求头可能被服务器配置(如Apache/Nginx的SetEnv指令)意外覆盖环境变量:

  • 对比Postman和其他项目调用时的请求头,移除不必要的自定义头后重新测试。
  • 在控制器中打印$_SERVER变量,检查环境变量是否被请求头篡改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:00:13