image - Gmail 的新图像缓存正在破坏时事通讯中的图像链接

标签 image caching gmail url-rewriting

我的网站注册完成后会自动发送一些电子邮件。

直到最近,它们都运行良好。现在Google's new system is rewriting the images and storing them in its cache (据说)

但是,Google 对我的图像链接的新重写完全破坏了它们,给出了 500 错误和损坏的链接图像。

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

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

Google 正在将其重写为:

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

但是,该 URL 上没有任何内容。

Email showing image errors

因此,要么 Google 创建的链接有问题,要么图像没有上传到 googleusercontent 服务器,但我不知道如何解决该问题。

我正在使用 PHP,phpmailer library以及 Amazon EC2 上的 Ubuntu 服务器,但我不确定这是否与该问题相关。

最佳答案

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

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

现在尝试打开您的电子邮件,您注意到您的图像出现了一些 404 状态。这是可以理解的事情。您立即意识到您忘记上传一些图像,因此将它们上传到您的服务器。并且您还修复了针对 protected 图像的一些权限。

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

啊,可能您忘记清除浏览器的缓存。清除浏览器缓存并再次加载 Gmail 或 Hotmail 页面。但结果还是一样。尝试应用数十个修复/补丁,并尝试运行 PHP 电子邮件脚本一千次。但结果还是一样。没有任何改善。

真正的问题

这到底是怎么回事?让我向你解释一下。转到您的访问日志并尝试查找来自 GoogleImageProxy 的请求。您会惊讶地发现,来自 GoogleImageProxy 的请求只有 2 或 3 个,具体取决于您的电子邮件中使用的不同图像的数量。 GoogleImageProxy 从未尝试获取图像即使您通过上传丢失的图像并设置 protected 图像的权限解决了图像问题。为什么?清除浏览器的缓存不会产生任何影响。即使对于您的新电子邮件,GoogleImageProxy 也永远不会获取新图像,因为这些图像现在连同其最后的状态代码一起缓存到 GoogleImageProxy 中,而不是缓存在您自己的浏览器中。

GoogleImageProxy 已为图像设置了自己的到期日期。我想一个月吧因此,现在将在到期日期后获取图像的新副本。我是说一个月后。您不能强制 GoogleImageProxy 获取图像。但在电子邮件中显示图像对您来说很重要。有什么解决办法吗?

解决方案

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

  • 将图像重命名为带有 png、jpg 或 gif 扩展名的其他内容 仅此而已。
  • 请勿在图片网址中使用任何类型的查询字符串,例如 ?t=34343
  • 您的图片必须包含 png、jpg 或 gif 作为扩展名。
  • 您的图片网址必须直接映射到您的图片上。
  • 如果您需要为 protected 图像使用某些代理 URL,那么您的响应必须包含正确的 header ,例如 内容类型:image/jpeg
  • 文件扩展名和内容类型 header 必须匹配
  • 状态代码必须为 200,而不是 403、500 等

重要说明

尝试在每次运行 PHP 电子邮件脚本时重复整个过程。因为每次 GoogleImageProxy 都会缓存您的图像,并且您必须在每次新尝试时重复相同的过程。

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

关于image - Gmail 的新图像缓存正在破坏时事通讯中的图像链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20903967/

相关文章:

java - 尝试用 Java 将文本添加到图像中,结果是相同的图像

image - 从图像中提取图案

java - HttpClients PoolingHttpClientConnectionManager 和 DNS 缓存

image - Vowpal Wabbit 模型在使用像素 RGB 值对图像进行多类分类时表现不佳

android - ImageView 背景太大

ruby-on-rails - 使用带有模板继承的俄罗斯套娃缓存的问题

jquery - jqGrid 缓存网格数据

python - 发送电子邮件 : raise SMTPAuthenticationError(code, 时出错)

c# - Outlook 2010 和 Gmail 中的 HTML 呈现

android - 寻找 Android Gmail SMTP Oauth 示例