如何跟蹤郵件已讀狀態(Java)
>圖片的展示形式:
html中圖片元素表示:
<img src="url" alt="some_text">
其中src部分是比較好玩的,我們可以用圖片伺服器連結地址,例如:
<img src="https://ss1.bdstatic.com/lvoZeXSm1A5BphGlnYG/icon/95541.png"/>
我們也可以使用base64的圖片字串,例如:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA9UlEQVQoz2M8IarEQApgYSARUKaBXVaGXU7609GTfNbmcMGvV67//fgJuwbRiGDp0ryTYsqa65fBBf9+/PRi1oIn3RMJOOlp96Qn3RO5dDRlSvOlS/OY+Xkf1rQQ9sO3K9dvxWeoLZwhkZZIlAYIeL1iraCnK5+1+aejJ4nS8PfTJ9KClV1WhoGB4c/HT+gauHQ0kUMQApj5+aRL834+fvLtynWoBmZ+Pj4rc0FPV0FP19cr1kLUsclK81mb81lZiEQEscvK3IrPgBpwQlTpWkDk/////3z4+Gr5mtMqBidElf4jgXfbdl0LiDwhqgRBjIMv8QEA/1FkTf0KrVIAAAAASUVORK5CYII=" />
>利用圖片載入來跟蹤使用者開啟郵件狀態:
我們可以利用img元素,在郵件正文隱藏一張圖片,src指向我們伺服器的服務URL,例如:
<img src="http://127.0.0.1:8080/services/email/hasRead/{address}">
當用戶開啟郵件正文時,隱藏圖片會被載入,請求我們的服務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元素,成功跟蹤到使用者已讀郵件的狀態了。完
喜歡請關注微信公眾號:碼農小麥