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

Laravel 10中1x1像素图片追踪邮件打开状态失败问题求助

问题修复方案

核心问题分析

  1. 请求方法不匹配:图片src属性发起的是GET请求,但track_open路由定义为POST方法,邮件客户端只会发送GET请求,导致路由无法匹配,既不会更新open字段,也无法返回图片内容。
  2. 图片响应缺少正确头信息:返回图片时未设置Content-Type为image/png,即便请求成功,邮件客户端也无法识别这是有效图片,因此显示破碎。

具体修复步骤

1. 修改路由请求方法

将track_open路由从POST改为GET,适配图片加载的请求类型:

// web.php
Route::get('/images',[CampaignController::class,'index'])->name('track_open');

2. 修复控制器的图片响应逻辑

返回图片时设置正确的Content-Type头,同时优化图片读取方式:

public function index(Request $request)
{
    $mail = Campaign::find($request->id);
    if ($mail) {
        $mail->open = 1;
        $mail->save();
    }
    
    // 用Laravel内置方法返回图片并设置正确头信息
    return response()->file(public_path('1x1.png'), [
        'Content-Type' => 'image/png',
    ]);
}

3. 排除CSRF验证(必要操作)

邮件中的请求不会携带Laravel的CSRF令牌,需将追踪路由加入CSRF白名单:
打开app/Http/Middleware/VerifyCsrfToken.php,在$except数组中添加路由:

protected $except = [
    '/images',
];

额外注意事项

  • 确认public/1x1.png文件存在且权限正常。
  • 部分邮件客户端会默认阻止外部图片加载,用户需手动开启图片才能触发追踪,这是邮件安全机制限制,无法通过代码规避。

内容的提问来源于stack exchange,提问作者Tanjib Rubayet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:33:24