java 邮件跟踪_如何跟踪邮件已读状态(Java)
>图片的展示形式:
html中图片元素表示:
其中src部分是比较好玩的,我们可以用图片服务器链接地址,例如:
我们也可以使用base64的图片字符串,例如:
>利用图片加载来跟踪用户打开邮件状态:
我们可以利用img元素,在邮件正文隐藏一张图片,src指向我们服务器的服务URL,例如:
当用户打开邮件正文时,隐藏图片会被加载,请求我们的服务URL时,我们便可以知道用户已读,当然邮件一定发送成功了。
>存在的问题:
上面的方法可以获取用户已读状态,但是在有的邮件客户端,图片无法隐藏,所以我们需要在服务URL请求结束后,真实返回一张图片,但是图片最好近乎不可见。
用java简单生成一个不可见的图片(一个近乎不可见的点),代码如下:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import jodd.util.Base64;
public class TestImage {
public String getImageBase64() {
ByteArrayOutputStream baos = null;
StringBuffer sb = null;
try {
int width = 1;
int height = 1;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setBackground(new Color(255, 255, 255));
g2d.setPaint(new Color(0, 0, 0));
g2d.clearRect(0, 0, width, height);
g2d.dispose();
baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
sb = new StringBuffer("data:image/png;base64,");
sb.append(Base64.encodeToString(baos.toByteArray()));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// System.out.println(sb.toString());
return sb.toString();
}
public static void main(String[] args) {
new TestImage().getImageBase64();
}
}
>优化一下:
我们可以直接保存图片base64字符串,它本身就代表图片,无需每次生成,生成字符串如下:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR42mP4//8/AAX+Av4zEpUUAAAAAElFTkSuQmCC
我们在浏览器预览一下,效果如下:
这样我们利用image元素,成功跟踪到用户已读邮件的状态了。完
喜欢请关注微信公众号:码农小麦
java 邮件跟踪_如何跟踪邮件已读状态(Java)相关推荐
- mysql中单个表脏读_如何在Outlook中单击邮件后立即将其标记为已读
mysql中单个表脏读 Do you ever feel annoyed that Outlook doesn't mark messages as read as soon as you click ...
- 如何在Outlook中单击邮件后立即将其标记为已读
Do you ever feel annoyed that Outlook doesn't mark messages as read as soon as you click and view th ...
- android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)...
1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为 2,为了使LISTVIEW的ITEM在点 ...
- 具有用户已读状态功能的公告(3):一键已读所有公告
文章目录 1 摘要 2 解决方案 方案一 方案二 方案三 3 结论 1 摘要 关于公告这一系列的博客: 具有用户已读状态功能的公告(1):数据库设计 具有用户已读状态功能的公告(2):用户查询公告列表 ...
- pop3 邮件列表_什么是邮件列表| 第1部分
pop3 邮件列表 什么是邮件列表? (What Is A Mailing List?) The mailing-list is a system for the participation of m ...
- imap 已读回执_确保同事看到已读回执和延迟提醒电子邮件的“重要电子邮件”...
imap 已读回执 A lot of people ask how to schedule an email for a certain date and for good reason. As w ...
- java oom分析_作为测试你应该知道的JAVA OOM及定位分析
上周现网一个内存溢出问题导致应用服务器每隔一小时死一次,遂整理下常见的OMM.发现方法和处理方式,加入Bug预防. 常见的OutOfMemoryError有三种:OutOfMemoryError:Pe ...
- java gradle构建_在Gradle中为JPMS构建Java 6-8库
java gradle构建 通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS( Java平台模块系统 )的Java 6-8库. 介绍 如果您需要JPMS ...
- java初学者书籍_面向初学者的5本最佳Java核心书籍
java初学者书籍 Today I am sharing the best java books to learn java programming. Java is one of the most ...
最新文章
- Java面试人事篇(二)
- windows开启ssh当跳板机
- “跟风离职后,找不到工作了!”:好多同事离职,这家公司还值不值得待?...
- CentOS6.4+rabbitmq集群——源码安装
- SSIM(structural similarity index),结构相似性
- java解析xml转为Map
- iOS开发网络篇—网络编程基础
- 中国农业大学营养与健康研究院诚聘博士后
- [转]QT QDateTime类、QTimer类
- Linux more和less
- LightOJ1234 Harmonic Number
- Laravel 5.3 windows环境安装
- No package ‘gtksourceview-4‘ found
- python视频操作:下载、选取特定帧、批量导入ppt及硬字幕提取
- 动漫学日语《你的名字》(更新中)
- 灵魂拷问:为什么5G路由器比2.4G路由器快?
- 微信H5开发,怎样禁止手机横屏
- linux sftp连接报错:JSchException: Algorithm negotiation fail问题的解决方法
- JavaScript(js)基础
- AngelScript -- C++程序最好的脚本语言
热门文章
- 图像处理 --- 三、图像变换 3.2 图像的几何变换
- Linux学习之如何在物理机上安装Linux发行版
- 《画解算法》1.两数之和【python实现】
- ❤『面试知识集锦100篇』3.mysql篇丨mysql基础知识和面试真题,看完不收藏算我输!!
- Python PyInstaller 安装 和 使用教程( 打包生成 exe )
- java打开别人的代码报错_同样的代码,别人的可以运行我的报错,求解答
- ros自己写避障算法_slam导航避障算法,让无人机自主避障教学研究迈向更高处...
- python字符串筛选输出_如何在Python中过滤字符串列表
- 外设驱动库开发笔记1:AD56xx系列DAC驱动
- Python序列类型常用函数练习:enumerate() reversed() sorted() zip()