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

Laravel发送邮件至Gmail图片无法显示问题求助

解决Laravel发送邮件时Gmail中图片显示破损的问题

我之前也碰到过一模一样的问题,Gmail对外部图片的代理处理确实有点“挑剔”,咱们一步步来搞定它:

1. 先确认图片URL的完整性

你提供的图片src看起来被截断了(https://evaluo.org/ev...),Gmail的图片代理根本无法解析不完整的链接。首先要确保Laravel生成的图片地址是完整的绝对URL,建议用框架自带的辅助函数生成:

<!-- 在邮件视图中使用url()或asset()生成正确的绝对路径 -->
<img style="font-family:Avenir,Helvetica,sans-serif;box-sizing:border-box;max-width:100%;border:none;width:137px;height:68px" 
     src="{{ url('images/your-logo.png') }}" 
     alt="Logo">

生成后可以直接在浏览器里访问这个URL,确认图片能正常打开。

2. 改用内嵌图片(最稳妥的方案)

Gmail经常会对外部图片的代理转换出问题,把图片直接内嵌到邮件里就能彻底绕开这个问题。Laravel自带了图片内嵌的功能:

在邮件类的build方法中添加内嵌逻辑:

public function build()
{
    // 用embed()方法内嵌本地图片,参数是图片的本地路径
    $embeddedImage = $this->embed(public_path('images/your-logo.png'));

    return $this->view('emails.your-template')
                ->with(['embeddedImage' => $embeddedImage]);
}

在邮件视图中引用内嵌的图片:

<img style="font-family:Avenir,Helvetica,sans-serif;box-sizing:border-box;max-width:100%;border:none;width:137px;height:68px" 
     src="{{ $embeddedImage }}" 
     alt="Logo">

这样图片会作为邮件的一部分发送,Gmail不会再去代理外部链接,自然就不会显示破损了。

3. 检查图片服务器的防盗链和响应头

如果坚持用外部图片,要确保你的图片服务器:

  • 没有设置严格的防盗链规则(比如限制Referer),因为Gmail的代理请求Referer是谷歌域名,可能被你的服务器拦截
  • 返回正确的Content-Type响应头(比如image/png、image/jpeg),不要让浏览器猜图片类型
  • 没有设置X-Content-Type-Options: nosniff这类可能干扰Gmail代理解析的头

4. 清理Laravel配置缓存

有时候URL生成会因为缓存出问题,运行下面的命令清理缓存:

php artisan route:clear
php artisan config:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:23:39