1.前言
现在网上的方案都是在邮件里面插入一张图片的地址,当收件人打开之后,就会发送请求到指定路径的服务器上,然后在请求的controller里面处理邮件的状态,这个方案确实是行得通的,本文章只是给大家避个坑,因为这个方案在谷歌邮件上有些地方是需要注意的,要不然email里面插入图片是显示不出来的
2.我的处理
我先去用了一下美国那边比较火的邮件追踪,发现别人的邮件追踪也是在邮件里面插入了图片地址,但是这个图片地址会被谷歌的代理服务器转发,这样别人就没有办法拿到打开人的ip地址,下面的图是用别人的邮件追踪:
但是我这个需求是知道别人有没有打开这个邮件,所以这个不能拿到ip地址对我影响不大,然后我也按照这个思路,自己弄了一个小demo:
但是这样有个问题,我是打算 https://tapp.cc/111.jpg 这个地址是返回图片的base64字符串,但是这里并没有显示出返回的图片
但是我直接访问这个地址https://ci3.googleusercontent.com/meips/ADKq_NYJkbEDEbzIqq9I_nCLbkcoCgWLRe1VrjhQvu5szjrY3N-mFLm9otFRraL3SQEjrErRXlUyunlrQNk=s0-d-e1-ft#https://tapp.cc/111.jpg是可以进我的controller里面的,然后我也确实返回了一个base64的字符串,但是在页面缺是报404
但是别人的邮件追踪的这个请求又是可以,所以我就直接访问了他的这地址:https://s3.amazonaws.com/mailtrack-signature/sender-notified-72.gif 里面的这个请求,然后我发现他的响应体里面是没有东西的,我就想是不是他直接把图片以流的形式返回了,然后我就改了我的请求,把图片以流的形式写到response里面就成功了
3.总结
在邮件里面插入图片的地址,一定要把图片以流的形式写入到response里面,否则在谷歌这边是报404
注意!!:这个地址中一定要加随机数,要不然谷歌会进行缓存的!