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. NSLog打印NSInteger老是有warning

    zSpecifies that a following [...] conversion specifier applies to a size_t or the corresponding sign ...

  2. CSS兼容IE Firefox问题与解决方法

    一.双边距问题浮动元素的外边距会加倍,但与第一个浮动元素相邻的其他浮动元素外边距不会加倍.解决方法:在此浮动元素增加样式  display:inline; 二.图片产生的间隙父元素直接包含<im ...

  3. mysql服务器上的mysql这个实例中表的介绍

    1.user表. 分个分隔符

  4. 18B树、B++树和Trie树

    B树.B++树和Trie树 B树 定义:一个非空M元(也称M阶)B树(R.Bayer,1970年) 满足下列条件: 1)每个结点含有m个元素a1<a2<…<am.含有m个元素的结点有 ...

  5. LINUX环境变量(一)

    Linux 的变量可分为两类:环境变量和本地变量 环境变量,或者称为全局变量,存在与所有的shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了.Linux 的环境变量具有继承性,即子 ...

  6. linux基础命令---chattr

    chattr 改变文件的属性,这个命令只有超级用户才能使用.这个指令适用于ext2.ext3.ext4.xfs.ubifs.reiserfs.jfs系统. 此命令的适用范围:RedHat.RHEL.U ...

  7. Linux中Postfix邮件WebMail配置(七)

    Extmail Extmail 是一个以perl语言编写,面向大容量/ISP级应用,免费的高性能Webmail软件,主要包括ExtMail.Extman两个部分的程序套件.ExtMail套件用于提供从 ...

  8. web前端----html表单操作

    form表单 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.selec ...

  9. MySQL数据库----触发器

    触发器-trigger 触发器:监视某种情况,并触发某种操作. 使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为,注意:没有查询 -- 触发器:某种程序触发了工具的运行 -- 触发器不能主 ...

  10. C++设计模式 之 “单一职责”模式:Decorator、Bridge

    part 1 “单一职责”模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式 Decorato ...