【问题标题】:images inside gmail email not being displayedgmail电子邮件中的图像未显示
【发布时间】:2015-03-10 13:36:09
【问题描述】:

我知道 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。在所附图片中,您可以看到该图片的请求和响应标头。

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

PS:我也面临与 hotmail 相同的问题。

【问题讨论】:

  • 我也遇到过这种情况。你正在使用什么框架?在附件中指定图像的 mime 类型对我有用。
  • @AwaisQarni 这不是电子邮件附件。我在电子邮件正文中发送了一封带有 img 标签的 HTML 电子邮件。所以问题是图像没有显示在gmail的电子邮件正文中。而是显示空白图像占位符。

标签: caching proxy gmail


【解决方案1】:

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

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

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

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

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

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

真正的问题

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

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

解决方案

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

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

重要提示

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

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

【讨论】:

    【解决方案2】:

    这些是嵌入的图像。您将图像作为附件发送,然后在您的 img 元素中使用它,例如:。 Gmail 将“cid”链接转换为其内部文件存储链接,这就是它提供元素的原因。

    这是在电子邮件中添加图片的两种常见方式之一。

    另一种方法是将图像保留在您的主机中并发送带有外部链接的 img 元素:http://yourdomain.com/yourimage.png 我强烈建议使用第二种方法,特别是如果您希望在电子邮件中包含大量图像。我在 Gmail 上显示附加图片时遇到问题,我无法解决。

    【讨论】:

    • Bilal,我没有在我的 html 电子邮件中嵌入图像。这只是一封简单的 html 电子邮件,其正文中有一个 img 标记,指向我域中的图像。像 但 gmail 将其转换为 。
    【解决方案3】:

    确保您的发件人地址是真实有效的电子邮件,而不是realname+something@example.com的形式。


    我正在使用 Amazon SES 发送电子邮件,并将一些但不是所有图像作为附件内联。对我来说,破坏的是非附件。

    最终我意识到我使用的是“假”电子邮件作为发件人字段。

    我的真实邮箱是

     simon@example.com
    

    为了便于过滤 gmail 中的电子邮件,我使用 + 语法创建了一个“假”电子邮件以进行测试。

     simon+test@example.com
    

    这很好用,只是它似乎改变了垃圾邮件/图像过滤器的行为。我的图片标签最终完全去掉了src 属性。

    当我切换回使用实际电子邮件时,所有图像都会显示出来。

    【讨论】:

    • 上述问题与 GoogleImageProxy 的缓存有关。我真的不认为使用虚假电子邮件地址是否会导致图像损坏问题。相反,它可以将邮件发送到垃圾邮件目录而不是破坏图像。
    • 我实际上打算删除这个答案。原来我点击了“显示来自这个发件人的图像”按钮,这就是图像显示的原因。我会做出新的回答或对此发表评论
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 2017-06-11
    • 2016-12-31
    • 1970-01-01
    • 2011-10-17
    • 2015-10-12
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多