Java注册帐号邮箱激活验证实现

1.需要加入发送邮件的mail.jar:

http://www.oracle.com/technetwork/java/javamail/index-138643.html

?

2.将字符串通过MD5进行加密的工具类:

class="java">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";
}
}
}

?


?

?

    • 查看图片附件

Java注册帐号邮箱激活验证实现的更多相关文章

  1. Java实现邮箱激活验证

    最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java [java] view plaincopyprint?   package co ...

  2. Java实现邮箱激活验证2

    SendEmail.java [java] view plaincopyprint?   package com.app.tools; import java.util.Date; import ja ...

  3. Java实现注册邮箱激活验证

    邮件发送servelet实现 package com.xbs.register.main; import java.io.IOException;import java.util.Date;impor ...

  4. servlet邮箱激活验证实例含代码

    也有很多人本来有机会的,他们都拒绝了,不想让自己太累,太麻烦.或者中途被情绪所左右,半途而废了. 成长是有代价的,同样悠闲也是有代价的. 流程: 用户填写相关信息,点击注册按钮 系统先将用户记录保存到 ...

  5. 主攻ASP.NET MVC4.0之重生:发邮箱激活验证

    导入Interop.jmail组件 using jmail;using System.Net.Mail; 点击下载源代码 Controller相关代码 public class SendEmailCo ...

  6. java 手机号码+邮箱的验证

    import java.util.regex.Pattern; //导入的包 1:String REGEX_MOBILE = "^((17[0-9])|(14[0-9])|(13[0-9]) ...

  7. Java实现邮箱验证

    Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开 ...

  8. 转:java 帐号激活与忘记密码 实例

    原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活   在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激 ...

  9. java工具类(二)之java正则表达式表单验证

    java正则表达式表单验证类工具类(验证邮箱.手机号码.qq号码等) 这篇文章主要介绍了java使用正则表达式进行表单验证工具类,可以验证邮箱.手机号码.qq号码等方法,需要的朋友可以参考下. jav ...

随机推荐

  1. 搭建私有npm私库(使用verdaccio)

    搭建 npm 离线服务器 为什么要搭建npm 服务器 原因: 公司内部开发的私有包,统一管理,方便开发和使用 安全性,由于公司内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便 ...

  2. 一款优秀的OA办公系统有哪些功能?

    OA办公系统解决企业的日常管理规范化.增加企业的可控性.提高企业运转的效率的基本问题,范围涉及日常行政管理.各种事项的审批.办公资源的管理.多人多部门的协同办公.以及各种信息的沟通与传递.可以概括的说 ...

  3. 5Lambda表达式

    C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.首先看一下Lambda表达式的基本构成: [函数对象参数](操作符重载函数参数)mutable或exception -&g ...

  4. AOAPC I: Beginning Algorithm Contests -- Training Guide (Rujia Liu) Chapter 3. Data Structures Fundamental Data Structures

    10410 这题说的是给了一棵多叉树的 bfs遍历轨迹 和dfs 遍历 轨迹 在父节点向叶子节点扩展的时候优先遍历编号较小的节点.我还原出这课树特殊判定 根据bfs的顺序来建立这课树,用一个队列安排要 ...

  5. Spring 自动扫描 不支持jar包 <component-scan>

    问题描述: 本机windows myeclipse10.7 运行非maven java项目,其中部分类使用spring3 注解进行注入,使用配置文件component-scan进行扫描,在本机debu ...

  6. python 循环队列的实现

    最近在做一个东西的时候发现需要用到循环队列,实现先进先出(FIFO),不断往里面添加数据,当达到某个限定值时,最先进去的出去,然后再添加.之后需要对队列里面的内容进行一个筛选,作其他处理.首先我想到了 ...

  7. Linux服务器---安装jdk

    安装jdk jdk是运行或者开发java的必须工具,很多软件都会依赖jdk,因此必须学会安装jdk 1.查看当前系统的jdk情况 [root@localhost wj]# rpm -qa | grep ...

  8. CSS 基础知识点 样式 选择器 伪类

    CSS 基础知识点汇集 版权声明:这篇博客是别人写的,大神博客地址 : https://www.cnblogs.com/Mtime/p/5184685.html 1.CSS 简介 CSS 指层叠样式表 ...

  9. 开发代码code中变量替换

    除了automake/autoconfig 之外,还有其他的替换方式. 参看vdsm https://github.com/oVirt/vdsm/blob/master/Makefile.am htt ...

  10. CF#235E. Number Challenge

    传送门 可以理解为上一道题的扩展板.. 然后我们就可以YY出这样一个式子 ${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)=\sum_{i=1}^a\sum_{ ...