Gmail 的新图片缓存打破了新闻邮件中的图片链接

我已经得到了一些自动电子邮件发送后,我的网站注册完成。

直到最近,他们工作良好。现在 谷歌的新系统正在重写这些图像,并将它们存储在缓存中(据说)

然而,谷歌对我的图片链接的新改写完全打破了他们,给出了500个错误和一个破碎的链接图像。

假设我的正常图片网址是:

http://www.mysite.com/images/pic1.jpg

谷歌(Google)正在将其改写为:

https://ci5.googleusercontent.com/proxy/vI79kajdUGm6Wk-fjyicDLjZbCB1w9NfkoZ-zQFOB2OpJ1ILmSvfvHmE56r72us5mIuIXCFiO3V8rgkZOjfhghTH0R07BbcQy5g=s0-d-e1-ft#http://www.mysite.com/images/pic1.jpg

但是,在那个 URL 上没有任何东西。

Email showing image errors

所以,要么是 Google 创建的链接出了问题,要么就是图片没有上传到 googleusercontent 服务器,但我不知道如何解决这个问题。

我在 Amazon EC2上使用 PHP、 Phpmailer 库和 Ubuntu 服务器,但我不确定这是否与问题有关。

133871 次浏览

根据您的示例,看起来您正在使用传统的扩展(。JPG.PNG,.Gif).这个帖子上的一些人描述了您所面临的相同问题,并指出使用这些扩展可以解决问题。

其他可能的解决办法:

检查服务器为图像文件返回的内容类型是否正确。

您可以使用 Fiddler 检查这一点。

现在是3月6日,你可能已经明白了这一点,但我想我应该帮助其他人。我发现 JPG 在 gmail 中不起作用。PNG 格式非常好用。对不起,我不能解释为什么,但有时最好不要问为什么。使用 PNG!

我知道这是一个老问题,但同样的事情发生在我身上。当我检查我的访问记录时,我发现了这个

www.example.ca 66.249.85.50 - - [10/Apr/2014:17:57:18 -0400] "GET /newsletters/Apr10_2014/cad/cad2.jpg HTTP/1.1" 403 457 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (via ggpht.com GoogleImageProxy)"

您可以看到,我的服务器阻塞了 谷歌代理,给它一个 403 Forbidden应答。我决定检查一下我的 .Htaccess,果然我注释掉了 PROXY。在删除了这个之后,图片在 Gmail 上看起来就很好了。希望能帮上忙。

HTTPS 图像位置做缓存。我们的一些生产环境对于使用 HTTPS uri 的 gmail 代理图像位置没有任何问题。如果 SSL 证书在某种程度上是无效的,我可以看到 gmail 忽略了你的内容。

我想我已经解决了 GoogleImageProxy 的问题。

这与缓存概念有关。假设,您最近在服务器上部署了 PHP 代码,但是忘记上传图像。你用你的电子邮件逻辑测试过一次。你的系统生成了一封 HTML 电子邮件。当这封电子邮件将到达 Gmail 服务器 GoogleImageProxy 将尝试获取和存储图像从您的网站在自己的代理服务器。在获取图像时,GoogleImageProxy 发现您丢失的图像有404个状态,一些受保护的图像有403个状态。GoogleImageProxy 将这些状态存储在自己的代理服务器中。

现在尝试打开你的电子邮件,你注意到有404个状态对你的图像。这是可以理解的。您立即意识到您忘了上传一些图像,所以您将它们上传到了服务器。并且您还修复了一些针对受保护图像的权限。

你们的任务完成了。现在再次尝试运行 PHP 电子邮件脚本。因此,你会在你的 Gmail 或 Hotmail 收件箱中收到另一封电子邮件。你已经解决了所有的问题,与您的形象。现在,图像必须显示在您的电子邮件内容。但你还是看不到图像。

你可能忘了清空浏览器的缓存了。清除浏览器的缓存并再次加载 Gmail 或 Hotmail 页面。但结果还是一样。尝试应用几十个修复程序/补丁,并尝试运行 PHP 电子邮件脚本一千次。但结果还是一样。没有好转。

真正的问题

这到底是怎么回事?让我解释给你听。进入访问日志,尝试查找来自 GoogleImageProxy 的请求。你会惊讶地发现,只有2或3个来自 GoogleImageProxy 的请求,这取决于在你的电子邮件中使用的不同图像的数量。GoogleImageProxy 从来没有尝试获取图像,即使在您已经修复了与您的图像的问题,通过上传丢失的图像和设置保护图像的权限。为什么?清除浏览器的缓存没有影响。GoogleImageProxy 永远不会为你的新邮件获取新图像,因为这些图像现在被缓存到 GoogleImageProxy 中,连同它们的最新状态代码,而不是缓存在你自己的浏览器中。

GoogleImageProxy 已经为这些图像设置了自己的有效期。一个月吧。所以现在图像的新拷贝将在有效期之后获取。我是说一个月后。您不能强制 GoogleImageProxy 获取图像。但是在电子邮件中显示图像对你来说很重要。解决办法是什么?

解决方案

以下是强制 GoogleImageProxy 获取图像的唯一方法

  • 使用 png、 jpg 或 gif 扩展名将图像重命名为其他名称 只有。
  • 不要在图像 URL 中使用任何类型的查询字符串,如 ?t=34343
  • 您的映像必须包含 png、 jpg 或 gif 作为扩展。
  • 您的图像 URL 必须直接映射到您的图像。
  • 如果您需要为您的受保护的图像使用一些代理 URL,那么您的响应必须包括适当的标题,如 Content-Type: image/jpeg
  • 文件扩展名和内容类型头必须匹配
  • 状态码必须是200,而不是403,500等等

重要提示

尝试为每次运行 PHP 电子邮件脚本重复整个过程。因为每次 GoogleImageProxy 都会缓存你的图像,而且每次尝试都要重复同样的过程。

希望这将解决大多数人的问题。

我也遇到过类似的问题,但这是由 URL 的长度引起的。Google 在缓存 gmail 中的图片时会生成以下 URL:

https://ci4.googleusercontent.com/proxy/[hash]#[url])

生成的散列基于图像的 URL,但是大小将根据所使用的字符而变化。我用不同大小的 URL 运行了几个测试,发现如果 大麻长度超过2076个字符(接近2048字节 + meta?不确定)。

同样,图像 URL 可以生成超过这么多字符的散列,大约为1000个特殊字符或1500多个简单字符。如果散列长度超过2076个字符,则请求失败。

我知道这是一篇老文章,但希望这能帮助其他研发人员搜索谷歌

我试过了, 替换图像后(不更改图像名称)

  • 在新的浏览器中打开电子邮件,显示新的图像

  • 在 chrome (我的默认浏览器)中使用 Ctrl + f5(强制缓存刷新) , 还显示了新的图像

在我的情况下,文件的大小是问题,它是22兆(我知道对不对?)在我们减小尺寸之后,一切都开始运转起来。

检查文件大小 ,如果太大,压缩它。

对于这个问题,我有一个完美的解决方案,如果您正在使用 PHPMailer,那么您只需要在 PHPMailer 中添加另一个选项来附加这样的图像

$mail = 新的 PHPMailer () ; $mail-> AddEmbeddedImage (“ . ./Absolutepath/image/image. jpg”,“ logoimg”,“ . ./Absolutepath/image/image. jpg”) ;

在这里,我们给出了图像的绝对路径,并给它一个名称称为“ logoimg”或任何你想要的。

现在您可以像下面这样将这个 logoimg 添加到 HTML 主体中的任何位置

$mail-> Body =” 使用图像 测试 PHPMailerhtml 正文 这是一张测试图片: $mail-> send () ;

仅此而已。

我在发送动态图片的时候遇到了这个问题。我发现文件大小对谷歌代理服务器很重要。我建议将文件尽可能地缩小,看看是否有效。您可以使用您的 Gmail 帐户并添加来自 URL 的照片进行测试。如果你在写电子邮件的时候出现了这个动态图片,那么它就是可以被接收的。

编程愉快。

我知道这是一个古老的问题,但我遇到了这个问题。在我的例子中,图像存储在谷歌云存储中。有趣的是这个链接

https://storage.cloud.google.com/{bla_bla}/logo.png

返回307(临时重定向)和包含类似

https://{xxx}-apidata.googleusercontent.com/{bla-bla_bla}/logo.png?{zzz}

似乎 GoogleImageProxy 没有正确处理307

  1. 它在 Outook/hotmail 工作吗?这样我们就可以把它作为谷歌问题孤立起来。对你来说不是。
  2. 图像的大小可能是一个问题。尝试减少它,并看到
  3. Www.mysite.com 这个网站可以从你的系统访问 它也可以从谷歌服务器访问吗?
  4. 试试改变分机。.这就是诀窍: 你可能已经尝试了很多方法,但它仍然会从缓存中获取(这会使你的努力失效) ,但是当扩展改变时,它会再次获取,你之前所做的所有工作都会开始起作用,如果它起作用了,你可能会认为是“扩展”起了作用!(就像许多谈论延伸的人一样)

在我遇到这个问题的情况下,问题在于电子邮件模板中图像的路径在 URL 中有三个斜杠,例如 https:///content.example.org/image.png。这是很难发现的,当它在其他能够成功解析 URL 的电子邮件客户端工作时,谷歌的图像代理无法处理它,并导致代理图像地址为404。