在发送了大量的邮件后,如何才能知道有多少人打开了这封邮件呢,又如何知道是哪些客户打开邮件呢?一开始想好像很难实现,其实只要稍微想一下,其实实现的方法可以很简单。实现的思路就是,当客户打开这封邮件的时候,能够向我们的服务器发送一条请求,请求上带有相关信息,这样我们就能够获取到我们要的信息了。
?
?
基于以上的需求,我用直接java做了一个实现。
其中要求发的邮件中要带这样一条代码:
<img src="http://localhost:8080/analysis-mail/analysis?t_email=xxxxx@xx.xxx" style="display:none;"/>
?其中t_email参数就是表示该邮件所往的邮箱。
以下代码:
?
这是核心类:
package com.tongtongxue.analysis; import java.io.IOException; import java.sql.Connection; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AnalysisServlet extends HttpServlet { private static final long serialVersionUID = 2154562813857678799L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Connection conn = null; try { conn = DBUtil.getConn(); String email = req.getParameter("t_email"); String createDateTime = DateUtil.date2Str(); String ip = req.getRemoteAddr(); if (email == null) { email = ""; } if (ip == null) { ip = ""; } AnalysisBean analysisBean = new AnalysisBean(email, ip, createDateTime); AnalysisDao analysisDao = new AnalysisDao(conn); analysisDao.add(analysisBean); } catch (Exception e) { e.printStackTrace(); } finally { try { DBUtil.close(null, null, conn); } catch (Exception e) { e.printStackTrace(); } } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
?
统计信息java bean
?
package com.tongtongxue.analysis; public class AnalysisBean { private Integer id; private String email; private String ip; private String createDateTime; public AnalysisBean() { } public AnalysisBean(String email, String ip, String createDateTime) { this.email = email; this.ip = ip; this.createDateTime = createDateTime; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getCreateDateTime() { return createDateTime; } public void setCreateDateTime(String createDateTime) { this.createDateTime = createDateTime; } }
?
package com.tongtongxue.analysis; import java.sql.Connection; import java.sql.PreparedStatement; public class AnalysisDao { private Connection conn; public AnalysisDao(Connection conn) { this.conn = conn; } public void add(AnalysisBean analysisBean) throws Exception { String sql = "insert into t_analysis(email, ip, createDateTime) values(?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, analysisBean.getEmail()); pstmt.setString(2, analysisBean.getIp()); pstmt.setString(3, analysisBean.getCreateDateTime()); pstmt.executeUpdate(); DBUtil.close(null, pstmt, null); } }
?
数据库工具类:
package com.tongtongxue.analysis; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DBUtil { public static final String url = "jdbc:mysql://127.0.0.1/analysis-mail"; public static final String name = "com.mysql.jdbc.Driver"; public static final String user = "root"; public static final String password = ""; public static Connection getConn() throws Exception { Class.forName(name); Connection conn = DriverManager.getConnection(url, user, password); return conn; } public static void close(ResultSet rs, Statement stmt, Connection conn) throws Exception { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } }
?
时间工具类:
package com.tongtongxue.analysis; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { private static String format = "yyyy-MM-dd HH:mm:ss"; public static String date2Str() { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(new Date()); } }
?
转载链接:http://www.tongtongxue.com/archives/367.html
?
更多内容尽在:通通学 - 知识学习与分享平台
原文:http://09094224.iteye.com/blog/2266329