如何在Gmail的HTML邮件中显示图片?Yahoo邮件可加载但Gmail异常
这问题我之前帮不少开发者排查过,Gmail把你的图片URL改成googleusercontent.com开头的代理地址,其实是它的安全代理机制在起作用——为了防止恶意追踪、提升加载速度,Gmail会替用户请求外部图片,再通过自己的服务器转发。但如果你的图片服务器有配置限制,就会导致代理拉取不到图片,自然显示失败。
下面是几个针对性的解决思路:
检查图片服务器的Referer/跨域限制
Gmail的代理服务器请求图片时,携带的Referer是Gmail相关域名。如果你的服务器设置了严格的Referer白名单,就会拒绝这个请求。建议把googleusercontent.com加入服务器的允许列表,或者适当放宽Referer校验规则。确认图片地址可被公网访问
你的原始图片URL是内网域名(qacorp.moneygram.com),Gmail的代理服务器在公网环境,根本无法访问到内网资源。要么把图片迁移到公网可访问的CDN或存储服务,要么配置内网服务器的公网访问权限(注意安全风险)。修正URL的转义字符
原始URL里的&是HTML转义后的&,虽然浏览器能解析,但Gmail代理处理这类转义字符时可能出现异常。建议直接使用原始的&拼接参数,把URL改成:http://qaecmwcs.qacorp.moneygram.com/sites/Satellite?blobcol=urldata&blobkey=id&blobnocache=true&blobtable=MungoBlobs&blobwhere=1515690635784&ssbinary=true再嵌入邮件中。
验证服务器SSL证书有效性
现在Gmail代理默认用HTTPS请求外部资源,如果你的图片服务器SSL证书存在问题(比如自签名、过期、域名不匹配),代理会拒绝加载。确保服务器的SSL证书是受公网信任的正规证书。尝试直接嵌入图片(适合小图)
如果以上方法都不适用,可以把图片转换成Base64编码后直接嵌入邮件的HTML中,这样Gmail不需要请求外部服务器,自然不会触发代理机制。不过这种方式会增加邮件体积,只推荐用于小尺寸图片。
内容的提问来源于stack exchange,提问作者An User

