gmail 电子邮件中的图像未显示

images inside gmail email not being displayed

我知道 gmail 和 hotmail 已经推出了自己的图像代理。我已经用 src

发送了带有简单 img 标签的电子邮件
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到图片。在所附图片中,您可以看到此图片的请求和响应 headers。

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

PS: 我的hotmail也遇到了同样的问题。

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

这是在电子邮件中包含图像的两种常见方式之一。

另一种方法是将图像保存在您的主机中并使用外部 links 发送 img 元素:http://yourdomain.com/yourimage.png我强烈建议使用第二种方法,尤其是当您希望有很多电子邮件中的图像。我无法解决在 Gmail 上显示附加图片的问题。

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

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

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

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

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

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

真正的问题

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

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

解决方案

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

  • 将您的图片重命名为带有 png、jpg 或 gif 扩展名的其他名称 只有.
  • 不要在图片中使用任何类型的查询字符串 url,例如“?t=34343”
  • 您的图片必须包含 png、jpg 或 gif 作为扩展名。
  • 您的图像 url 必须直接映射到您的图像上。
  • 如果您需要为受保护的图像使用一些代理 url,那么您的
  • 回复必须包含正确的 header "content-type:image/jpeg"
  • 文件扩展名和 content-type header 必须匹配
  • Status-code 必须是 200 而不是 403、500 等等

重要提示

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

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

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

的形式

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

最终我意识到我在发件人字段中使用了 'fake' 电子邮件。

我的真实邮箱是

 simon@example.com

为了便于在 gmail 中过滤电子邮件,我使用 + 语法创建了一个 'fake' 电子邮件用于测试目的。

 simon+test@example.com

这很好用,只是它似乎改变了 spam/image 过滤器的行为。我的图片标签最终完全删除了 src 属性。

当我切换回使用实际电子邮件时,所有图片都出现了。