caching - Gmail 电子邮件中的图像未显示

标签 caching proxy gmail

我知道 gmail 和 hotmail 已经推出了自己的图像代理。我已经发送了带有简单 img 标签和 src 的电子邮件

src="http://www.zong360office.com/assets/images/logo/product-logo.png"

gmail 会这样转换

src="https://ci3.googleusercontent.com/proxy/PCxvUIqBvaJWn_7H8deiQhdJD1QKV_pU5n1JhrPh3xaXMLMzcdSBYCo6-tjs69AYy858H4j5ShIRjw0UrH_VWMtCxC0zIT-Gi4j_dlQv9uRZjzGWFWA=s0-d-e1-ft#http://www.zong360office.com/assets/images/logo/product-logo.png"

原始 URL 是图像的直接 URL。在附图中,您可以看到该图像的请求和响应 header 。

问题:请告诉我应该采取哪些步骤才能使该图像在 gmail 中可见。

PS:我在使用 hotmail 时也遇到了同样的问题。

最佳答案

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

我也在另一个问题中回答了这个问题(images inside gmail email not being displayed)。

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

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

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

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

真正的问题

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

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

解决方案

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

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

重要说明

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

希望这能解决大多数人的问题。就我而言,这已经解决了问题。

关于caching - Gmail 电子邮件中的图像未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28965219/

相关文章:

ios - 无法为 iPhone 模拟器安装 Charles Proxy 的 CA 证书

javascript - Gmail API Node js-gapi未定义

html - gmail 签名如何工作?

nhibernate - 计算 NHibernate 在单元测试中执行的查询数

java - 如何在 Java 中使用 CacheBuilder 构建和使用缓存

ruby-on-rails - Scraping rake 任务似乎受到不需要的缓存的影响

flash - 如何在不清除缓存的情况下强制 Web 浏览器重新加载新部署的 Flash 文件?

python-3.x - 如何为Anaconda创建.condarc文件?

wcf - WCF 代理生命周期的最佳实践 - 或者多久关闭一次 WCF 代理?

html - 如何摆脱 GMail HTML 电子邮件中的 "Show trimmed content"?