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

Laravel定时任务(Cronjob)发送邮件图片不显示问题排查

Laravel定时任务发邮件图片不显示问题排查

核心差异:手动触发 vs Cronjob触发

手动点击发送是Web请求环境,Cronjob是CLI命令行环境,两者的环境变量加载、路径上下文存在差异,这是问题的根源。

1. APP_URL配置未正确加载

Laravel生成图片绝对链接依赖APP_URL,Cronjob默认不会自动加载项目的.env文件,导致链接使用默认的http://localhost,图片无法访问。

  • 解决:
    • 修改Cron命令,先进入项目根目录再执行调度:
      cd /home/yourcpanelusername/public_html && php artisan schedule:run >> /dev/null 2>&1
      
    • 若需要指定环境,可在命令前添加环境变量:
      export APP_ENV=production && cd /home/yourcpanelusername/public_html && php artisan schedule:run >> /dev/null 2>&1
      

2. 邮件模板使用相对路径

如果模板中图片用相对路径(如<img src="/images/logo.png">),Web环境会自动补全域名,但CLI环境生成的链接缺失域名,导致图片失效。

  • 解决:改用Laravel的asset()或secure_asset()生成绝对路径:
    <img src="{{ asset('images/logo.png') }}" alt="网站Logo">
    

3. Cron执行用户权限不足

Cron默认以cPanel系统用户执行,和Web服务器用户(如apache/nginx)权限不同,可能无法读取图片文件或访问缓存目录。

  • 解决:
    • 确保项目public、storage目录权限为755,文件权限为644。
    • 若cPanel支持,可指定Web用户执行Cron命令(需配置sudo权限):
      sudo -u apache cd /home/yourcpanelusername/public_html && php artisan schedule:run >> /dev/null 2>&1
      

4. 配置缓存未更新

若之前执行过php artisan config:cache,之后修改了APP_URL,Cronjob会使用旧的缓存配置,而Web环境可能已刷新缓存。

  • 解决:重新生成配置缓存:
    php artisan config:cache
    

5. 调度命令上下文错误

如果Cron命令没有先进入项目根目录,artisan无法正确识别项目路径,导致asset()生成错误链接。

  • 解决:务必在Cron命令中加入cd到项目根目录的步骤,参考第1点的命令格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:05:32