统计邮件的打开率

在发送了大量的邮件后,如何才能知道有多少人打开了这封邮件呢,又如何知道是哪些客户打开邮件呢?一开始想好像很难实现,其实只要稍微想一下,其实实现的方法可以很简单。实现的思路就是,当客户打开这封邮件的时候,能够向我们的服务器发送一条请求,请求上带有相关信息,这样我们就能够获取到我们要的信息了。


 

基于以上的需求,我用直接java做了一个实现。

其中要求发的邮件中要带这样一条代码:

<img src="http://localhost:8080/analysis-mail/[email protected]" style="display:none;"/>

 其中t_email参数就是表示该邮件所往的邮箱。

以下代码:

 

AnalysisServlet

这是核心类:

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);
    }
}

 

AnalysisBean

统计信息java bean

扫描二维码关注公众号,回复: 467734 查看本文章
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;
    }
}

 

AnalysisDao

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);
    }
}

DBUtil

数据库工具类:

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();
        }
    }
}

 

DateUtil

时间工具类:

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

更多内容尽在:通通学 - 知识学习与分享平台

猜你喜欢

转载自09094224.iteye.com/blog/2266329