生产环境Laravel应用调用SendinBlue API无法发送邮件排查
Laravel生产环境SendinBlue API邮件发送500错误排查方案
核心排查方向
1. 优先查看Laravel生产环境日志
控制台的error_log输出可能因生产环境PHP配置(如error_log路径、display_errors关闭)无法显示,直接前往Laravel默认日志目录storage/logs/laravel.log,查找对应时间点的错误堆栈,这是定位500错误最直接的方式。
2. 校验SendinBlue生产环境配置
- 检查
.env文件中SendinBlue相关变量(如SENDINBLUE_API_KEY、MAIL_MAILER=sendinblue等)是否与本地一致,排查拼写错误、密钥过期问题 - 在生产服务器上执行
curl -I https://api.sendinblue.com/v3/,验证服务器能否正常访问SendinBlue的API域名
3. 排查checkEmail函数的前置逻辑
你提到error_log('code='. $code->promo_code)未输出,说明代码执行到该行前已抛出异常:
- 检查
$code变量的获取逻辑,比如数据库查询是否返回null,导致调用->promo_code触发致命错误 - 在checkEmail函数开头添加日志:
error_log('进入checkEmail函数,邮箱:'. request('email')),确认函数是否真的被触发
4. 验证生产环境依赖与运行环境
- 对比本地与生产的PHP版本、扩展(如
curl、openssl),SendinBlue SDK对这些组件有版本要求 - 确认生产环境已执行
composer install --no-dev,排查依赖包是否完整安装、是否存在版本冲突
5. 临时开启调试模式(仅限测试,测试后关闭)
在.env中设置APP_DEBUG=true,同时确保APP_ENV=production时的调试配置允许显示错误(注意不要长期开启,避免泄露敏感信息),此时前端会展示具体错误信息,而非泛泛的500提示
实用调试技巧
- 在checkEmail函数关键逻辑外包裹
try-catch块,捕获所有异常并记录详细信息:
try { // checkEmail核心逻辑代码 error_log('code='. $code->promo_code); // SendinBlue邮件发送代码 } catch (\Exception $e) { error_log('checkEmail异常:'. $e->getMessage() . ' 堆栈信息:'. $e->getTraceAsString()); }
- 如果使用Laravel队列发送邮件,确认生产环境队列进程正在运行:执行
php artisan queue:work(或配置supervisor守护进程),队列失败任务会存入failed_jobs表,可从中查看失败原因
内容的提问来源于stack exchange,提问作者Armando_pagano
相关产品推荐
相关产品推荐

