java 邮箱验证
1.需要加入发送邮件的mail.jar:
http://www.oracle.com/technetwork/java/javamail/index-138643.html
2.将字符串通过MD5进行加密的工具类:
- import java.io.UnsupportedEncodingException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- /**
- * 创建人: zy
- * 创建时间: 2014年10月22日 下午2:36:19
- * 类描述:将字符串进行加密的工具类
- */
- public class MD5Util {
- /**
- * 将源字符串通过MD5进行加密为字节数组
- * @param source
- * @return
- */
- public static byte[] encodeToBytes(String source) {
- byte[] result = null;
- try {
- MessageDigest md = MessageDigest.getInstance("MD5");
- md.reset();//重置
- md.update(source.getBytes("UTF-8"));//添加需要加密的源
- result = md.digest();//加密
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return result;
- }
- /**
- * 将源字符串通过MD5加密成32位16进制数
- * @param source
- * @return
- */
- public static String encodeToHex(String source) {
- byte[] data = encodeToBytes(source);//先加密为字节数组
- StringBuffer hexSb = new StringBuffer();
- for (int i = 0; i < data.length; i++) {
- String hex = Integer.toHexString(0xff & data[i]);
- if (hex.length() == 1) {
- hexSb.append("0");
- }
- hexSb.append(hex);
- }
- return hexSb.toString();
- }
- /**
- * 验证字符串是否匹配
- * @param unknown 待验证的字符串
- * @param okHex 使用MD5加密后的16进制字符串
- * @return
- */
- public static boolean validate(String unknown , String okHex) {
- return okHex.equals(encodeToHex(unknown));
- }
- }
3.发送邮件的工具类:
- import java.util.Date;
- import java.util.Properties;
- import javax.mail.Authenticator;
- import javax.mail.Message;
- import javax.mail.MessagingException;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.AddressException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- /**
- * 创建人: zy
- * 创建时间: 2014年10月22日 下午3:04:11
- * 类描述:发送邮件工具类
- */
- public class SendMailUtil {
- public static final String HOST = "smtp.163.com";
- public static final String PROTOCOL = "smtp";
- public static final int PORT = 25;
- public static final String SENDER = "***@163.com";//此处需要与host相同的网站
- public static final String SENDERPWD = "********";
- /**
- * 获取用于发送邮件的Session
- * @return
- */
- public static Session getSession() {
- Properties props = new Properties();
- props.put("mail.smtp.host", HOST);//设置服务器地址
- props.put("mail.store.protocol" , PROTOCOL);//设置协议
- props.put("mail.smtp.port", PORT);//设置端口
- props.put("mail.smtp.auth" , true);
- Authenticator authenticator = new Authenticator() {
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(SENDER, SENDERPWD);
- }
- };
- Session session = Session.getDefaultInstance(props,authenticator);
- return session;
- }
- /**
- * 发送邮件
- * @param receiver
- * @param content
- */
- public static void send(String receiver, String content) {
- Session session = getSession();
- try {
- System.out.println("-------开始发送-------");
- Message msg = new MimeMessage(session);
- //设置message属性
- msg.setFrom(new InternetAddress(SENDER));
- InternetAddress[] addrs = {new InternetAddress(receiver)};
- msg.setRecipients(Message.RecipientType.TO, addrs);
- msg.setSubject("开心网-帐号激活");
- msg.setSentDate(new Date());
- msg.setContent(content,"text/html;charset=utf-8");
- //开始发送
- Transport.send(msg);
- System.out.println("-------发送完成-------");
- } catch (AddressException e) {
- e.printStackTrace();
- } catch (MessagingException e) {
- e.printStackTrace();
- }
- }
- }
4.发送邮件的Servlet或Action:
- User user = userDao.getUser();
- if (user != null && user.getQybj() != 1) {
- String email = user.getEmail();
- StringBuffer content = new StringBuffer("<h2>请点击下面的链接激活帐号,链接只能使用一次,请尽快激活!</h2>");
- String nameMd5 = MD5Util.encodeToHex(user.getUsername()+"审核通过");//创建加密字符串
- content.append("<a style='font-size:16px;' href='http://localhost:8080/czfc/register.reg?doType=activate&")
- .append("email=" + email + "&name=" + nameMd5 +"'>")
- .append("http://localhost:8080/czfc/register.reg?doType=activate&")
- .append("email=" + email + "&name=" + nameMd5 + "</a><br/><br/>")
- .append("<span style='color:blue;font-size:20px;font-weight:bold;'>———浙江常山欢迎您!<span>");
- SendMailUtil.send(email, content.toString());//开始发送邮件
- }
5.点击链接验证的Servlet或Action:
- String userName = request.getParameter("name");
- String email = request.getParameter("email");
- UserPostDao userDao = new UserPostDao();
- User user = userDao.getUserByEmail(email);
- if (user == null) {
- destination = "/register/activeFail.jsp";
- request.setAttribute("msg", "链接错误");
- }
- else {
- String userNameMd5 = MD5Util.encodeToHex(user.getUsername()+"审核通过");
- if (!(userName.equals(userNameMd5)) {
- request.setAttribute("msg", "链接错误");
- destination = "/register/activeFail.jsp";
- }
- else {
- boolean done = userDao.updateUserStatusByEmail(email, 1);
- if (done) {
- request.setAttribute("userId", user.getUserid());
- request.setAttribute("userName", user.getUsername());
- destination = "/register/activeSuccess.jsp";
- }
- else {
- request.setAttribute("msg", "激活出错");
- destination = "/register/activeFail.jsp";
- }
- }
- }