Gmail中图片不显示

14

最近谷歌宣布 Gmail 为了安全起见将使用代理程序来加载外部图像。这对我的应用程序在显示 Gmail 中的图像时造成了问题。

Gmail 图像元素检查: https://ci5.googleusercontent.com/proxy/N4RZncgANd5glVi64ElKxecSE10SH6iAhu2VKOK3jJtgaRKBUsqwOn6iDwY49unvlD9Xi6cSZp0T4u1N_KHhBY-TxFaV8PvPNSMn4A=s0-d-e1-ft#http://localhost:8080/email/thread/1301/images/correct) no-repeat">正确答案

根据上述 HTML,实际的图像网址前缀带有 Google 代理网址,从而阻止图像被显示。如果我们删除此垃圾网址,图片就会正常显示。苹果 Mac 邮件没有出现同样的问题。

我们已经使用 Java 发送 API 提供了邮件功能。请给予建议。

谢谢, Divya Garg


我在Magento中使用hMail服务器时遇到了类似的问题,无法从本地主机发送电子邮件给其他用户。 - Mukesh
有人解决了吗? - Abdul Fattah Boshi
1个回答

18

问题在于您用于邮件的URL。根据提供的信息,似乎是:

http://localhost:8080/email/thread/1301/images/correct

这是一个指向本地计算机文件的URL。然而,该URL - 而不是实际的图片 - 被传递到Google的代理服务器以检索。Google无法从其代理服务器访问该URL,因此图像将无法显示。

解决方案是确保您使用的路径可以在本地网络之外访问;例如,通过在面向外部的服务器上托管图像。


13
为了开发目的,你可以在调试器控制台(F12)中使用此 JavaScript 以显示这些图片:(function(){ while(img = document.evaluate('//img[contains(@src, 'googleusercontent.com')]', document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue){ var src = img.attributes.src.value; src = src.substr(src.indexOf('#')+1); img.attributes.src.value = src; } })(); - JBreton
2
对于outlook.com:(function(){ while(img = document.evaluate('// img [contains(@ src,'mail.live.com')] ',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue){ var src = img.attributes.src.value; src = src.substr(src.indexOf('url =')+4); img.attributes.src.value = decodeURIComponent(src); } })(); - bakkay
1
@JBreton 它会冻结我的电脑。 - Victor Bredihin
@JBreton 即使这在某个时候曾经起作用,现在似乎会导致我的 Mac 上的 Firefox 冻结。 - medonja
5
GMail的设计变更破坏了我的老脚本。这是一个更新后的脚本: (function(){ while(img = document.evaluate('//img[contains(@src, \'googleusercontent.com\')][contains(@src, \'#\')]', document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue){ var src = img.attributes.src.value; src = src.substr(src.indexOf('#')+1); img.attributes.src.value = src; } })();我添加了一个条件,现在src需要包含#号。这可以防止无限循环。 - JBreton
不,我没有在本地主机上使用它,但是遇到了同样的问题。 - Omar

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