Java注册帐号邮箱激活验证实现
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注册帐号邮箱激活验证实现的更多相关文章
- Java实现邮箱激活验证
最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java [java] view plaincopyprint? package co ...
- Java实现邮箱激活验证2
SendEmail.java [java] view plaincopyprint? package com.app.tools; import java.util.Date; import ja ...
- Java实现注册邮箱激活验证
邮件发送servelet实现 package com.xbs.register.main; import java.io.IOException;import java.util.Date;impor ...
- servlet邮箱激活验证实例含代码
也有很多人本来有机会的,他们都拒绝了,不想让自己太累,太麻烦.或者中途被情绪所左右,半途而废了. 成长是有代价的,同样悠闲也是有代价的. 流程: 用户填写相关信息,点击注册按钮 系统先将用户记录保存到 ...
- 主攻ASP.NET MVC4.0之重生:发邮箱激活验证
导入Interop.jmail组件 using jmail;using System.Net.Mail; 点击下载源代码 Controller相关代码 public class SendEmailCo ...
- java 手机号码+邮箱的验证
import java.util.regex.Pattern; //导入的包 1:String REGEX_MOBILE = "^((17[0-9])|(14[0-9])|(13[0-9]) ...
- Java实现邮箱验证
Java实现邮箱验证 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开 ...
- 转:java 帐号激活与忘记密码 实例
原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活 在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激 ...
- java工具类(二)之java正则表达式表单验证
java正则表达式表单验证类工具类(验证邮箱.手机号码.qq号码等) 这篇文章主要介绍了java使用正则表达式进行表单验证工具类,可以验证邮箱.手机号码.qq号码等方法,需要的朋友可以参考下. jav ...
随机推荐
- logistics回归
logistic回归的基本思想 logistic回归是一种分类方法,用于两分类问题.其基本思想为: a. 寻找合适的假设函数,即分类函数,用以预测输入数据的判断结果: b. 构造代价函数,即损失函数, ...
- css中外边距
1.内部元素设置margin等,父元素高度不能适应 .classA { height: 200px; background-color: cornflowerblue; overflow: hidde ...
- python三步实现人脸识别
原文地址https://www.toutiao.com/a6475797999176417550 Face Recognition软件包 这是世界上最简单的人脸识别库了.你可以通过Python引用或者 ...
- win 7 和 winserver 2008 下,布署网站遇到的错误解决方法
本人亲测,有效. 1.如果只列出目录: web.config的system.webServer配置节下是否有这个: <modules runAllManagedModulesForAllRequ ...
- AdaBoost Classifier和Regressor
Adaboost原理传送门 AdaBoost在我看理论课程的时候,以分类为例子来讲解的,谁知道sklearn里面基本上都有classifier和regressor两种.这个倒是我没想到的!!! fro ...
- 圆锥体完全均衡下重力异常正演 [MATLAB]
在完全均衡的模型下,若地表有一圆锥体(山峰等),计算跨越山顶的截面上所得到的各种重力异常. 地壳密度 $kg\cdot m^{-3}$ 上地幔密度 $g\cdot cm^{-3}$ 地表地形圆锥体半径 ...
- js之数组排序
数组,大家都不陌生,只要是学编程的人都知道这个入门的数据结构,在js中也是有数组这个概念的,跟普通的数组一样只是定义的形式不同罢了.下面是一个数组的排序代码: <html> <hea ...
- XML—代码—DOM4J解析
什么是xml: 众所周知,xml常用语数据存储和传输,文件后缀为 .xml: 它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言. 如何定义这些标记 ...
- C/C++之内存分配
一.编译时与运行时的内存情况1.编译时不分配内存编译时是不分配内存的.此时只是根据声明时的类型进行占位,到以后程序执行时分配内存才会正确.所以声明是给编译器看的,聪明的编译器能根据声明帮你识别错误.2 ...
- SaltStack安装及配置
1.简介SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack基于Python语言实现,结合 ...