我知道 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/