Gmail电子邮件中的图片未被显示。

4

我知道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类型指定为附件对我有用。 - Awais Qarni
@AwaisQarni 这不是一个电子邮件附件。我发送了一封包含img标签的HTML电子邮件。问题在于,在Gmail中,图像未显示在电子邮件正文中,而是显示为空白图像占位符。 - Malik Ahmed Khan Awan
3个回答

6
我认为我已经解决了GoogleImageProxy的问题。
我也在另一个问题中回答了这个问题(图片在Gmail邮件中无法显示)。
这与缓存概念有关。假设你最近在服务器上部署了你的PHP代码,但是你忘记上传图像。你测试了一次你的电子邮件逻辑。当这封电子邮件到达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扩展名。
  • 不要在图像URL中使用任何类型的查询字符串,如“?t=34343”。
  • 您的图像必须包括png、jpg或gif作为扩展名。
  • 您的图像URL必须直接映射到您的图像。
  • 如果您需要为受保护的图像使用代理URL,则您的响应必须包括正确的标题,如“content-type:image/jpeg”。
  • 文件扩展名和内容类型标题必须匹配。
  • 状态代码必须为200,而不是403、500等。

重要提示

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

希望这可以解决大多数人的问题。在我的情况下,这已经解决了问题。


0

请确保您的发件人地址是一个真正有效的电子邮件地址,而不是类似于realname+something@example.com的形式。


我正在使用Amazon SES发送电子邮件,并将一些但不是全部图像作为附件嵌入。对于我来说,非附件是出问题的原因。

最终我意识到我在发件人字段中使用了一个“虚假”的电子邮件。

我的真实电子邮件是

 simon@example.com

为了使在Gmail中筛选电子邮件变得更加容易,我使用+语法创建了一个“假”电子邮件,用于测试目的。
 simon+test@example.com

这个很有效,但它似乎改变了垃圾邮件/图像过滤器的行为。我的图像标签最终完全剥离了src属性。

只要我切换回使用实际的电子邮件,所有图像就会显示出来。


上述问题与GoogleImageProxy的缓存有关。我真的不认为使用虚假电子邮件地址会导致图像损坏的问题,而是可能会将邮件发送到垃圾邮件目录中,而不是破坏图像。 - Malik Ahmed Khan Awan
我原本打算删除这个答案。结果发现我点击了“显示来自此发件人的图像”按钮,这就是为什么图片会出现的原因。我将新建一个答案或添加一条评论来说明这一点。 - Simon_Weaver

0

这些是嵌入式图片。您可以将图像作为附件发送,然后在img元素中使用它,例如:。 Gmail将“cid”链接转换为其内部文件存储链接,这就是为什么它会给出element。

这是电子邮件中两种常见的插入图片的方式之一。

另一种方法是将图像保留在您的托管中,并使用外部链接发送img元素:http://yourdomain.com/yourimage.png我强烈建议使用第二种方法,特别是如果您希望在电子邮件中有很多图像。我曾经遇到过无法解决的Gmail附加图像显示问题。


1
Bilal,我没有在我的HTML电子邮件中嵌入图像。这只是一个简单的HTML电子邮件,在其正文中有一个指向我域名上的图像的img标签,例如< img src="url-path-to-image-on-my-domain" />,但Gmail会将其转换为< img src="url-path-to-image-on-gmail-proxy" />。 - Malik Ahmed Khan Awan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接