关键点就在于:

根据用户的给出的email,给这个email发送一个邮件。这个邮件中应该带有一个激活码?(32位UUID,64位UUID)。

大概步骤:

1,  注册功能 - 只要用户注册成功,就给他发邮件。接收参数:username,password,email

注册成功的同时,给注册的邮箱发激活邮件,带过去一个激活链接和激活码。因为发邮件需要时间较长,所以单独起一个线程发邮件。

2,  激活功能 – 用户从邮箱点击激活的链接,把激活码再带到激活方法。

3,  登录—只有激活的账户才能登录。

用户表:应该弄个用户状态字段,在这省了。

CREATE TABLE `users` (
`id` varchar(32) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(32) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

激活码表::uid是用户表id,code是激活码

CREATE TABLE `active` (
`uid` varchar(32) NOT NULL,
`code` varchar(64) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

关键代码:

注册页:

<body>
<hr/>
<p>主页</p>
<font color="red">${msg}</font>
<form name="xx" action="" method="post">
Name:<input type="text" name="name"/><br/>
Pwd:<input type="text" name="pwd"/><br/>
Email:<input type="text" name="email"/><br/>
<input type="button" onclick="_login();" value="登录"/>
<input type="button" onclick="_reg();" value="注册"/>
</form>
</body>
</html>
<script type="text/javascript">
function _reg(){
document.forms[0].action="<%=basePath%>users/register";
document.forms[0].submit();
}
function _login(){
document.forms[0].action="<%=basePath%>users/login";
document.forms[0].submit();
}
</script>

发送邮件的类,是一个线程类,以加快响应速度:

/**
* 发激活验证码邮件线程
*/
public class SendActiveEmailThread extends Thread{ private Users user; public SendActiveEmailThread(Users user){
this.user = user;
}
@Override
public void run() {
try {
Properties p = new Properties();
p.setProperty("mail.host","smtp.163.com");
p.setProperty("mail.smtp.auth", "true");
Session s = Session.getDefaultInstance(p,new Authenticator() {
public javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@163.com", "密码.");
};
});
s.setDebug(true);
MimeMessage mm = new MimeMessage(s);
mm.setFrom(new InternetAddress("xxxx@163.com"));
mm.setRecipient(RecipientType.TO,new InternetAddress(user.getEmail()));
mm.setSubject("NB科技账户激活");
//声明url
String url = "http://127.0.0.1:8080/lhy-weixin/active/activeAccount?code="+user.getCode();
String html ="你好:"+user.getName()+"<br/>请激活:<a href='"+url+"'>激活</a>,你可以Copy这个连接:"+url;
mm.setContent(html,"text/html;charset=UTf-8"); Transport.send(mm);
} catch (Exception e) {
e.printStackTrace();
}
} }

注册方法:

@RequestMapping("/register")
public String register(Users user){ //保存用户
String uid = IDUtils.genItemId()+"";
user.setId(uid);
//注册
usersService.addUser(user);
Active ac = new Active();
ac.setUid(uid);
//激活码
String code = UUID.randomUUID().toString().replace("-", "")
+ UUID.randomUUID().toString().replace("-", "");
ac.setCode(code);
//保存激活码
usersService.addCode(ac); //开启线程发邮件,加快响应速度
user.setCode(code);
new SendActiveEmailThread(user).start();
return "regsucc";
}

注册成功后,在邮箱点击激活,会跳转到激活方法,接收激活码:

 @RequestMapping("activeAccount")
public String activeAccount(String code,Model model){
//接收激活码
int effect = userService.deleteActiveByCode(code);
if(effect ==0){
model.addAttribute("activeStatue", "0");
}else{
model.addAttribute("activeStatue", "1");
}
return "activeResult";
}

登录方法:

@RequestMapping("/login")
public String login(Users user,HttpServletRequest req,Model model){
Users u = usersService.login(user);
if(u==null){
model.addAttribute("msg", "用户名或密码错误");
return "index";
}else{
if(u.getCode()==null){
req.getSession().setAttribute("user", u);
return "main";
}else{
model.addAttribute("msg", "账户未激活,请激活后再登录");
return "index";
}
}
}

其实可以把激活码放到redis缓存,还设置激活码失效时间,可以对比注册时间和激活的时间。

JavaMail之-通过邮件激活账号的更多相关文章

  1. Java实现注册时发送激活邮件+激活

    最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 1.RegisterController.java package com.app.web.controller; import java ...

  2. 使用Asp.Net Identity 2.0 认证邮箱激活账号(附DEMO)

    注:本文系作者原创,但可随意转载.若有任何疑问或错误,欢迎与原作者交流,原文地址:http://www.cnblogs.com/lyosaki88/p/aspnet-itentity-ii-email ...

  3. 基于JavaMail的Java邮件发送:复杂邮件发送

    参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...

  4. java-基于JavaMail的Java邮件发送

    1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

  5. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

  6. JavaMail(二):利用JavaMail发送复杂邮件

    上一篇文章我们学习了利用JavaMail发送简单邮件,这篇文章我们利用JavaMail发送稍微复杂一点的邮件(包含文本.图片.附件).这里只贴出核心代码,其余代码可参考JavaMail(一):利用Ja ...

  7. JavaMail技术实现邮件发送转【】

    1.导入2个jar包,mail.jar,activation.jar 2.导入的jar包与myeclipse中自带的javaee 中的javaee.jar中的javax.activation包及jav ...

  8. 基于JavaMail的Java邮件发送:简单邮件发送

    使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) . 您可以从 Java 网 ...

  9. django 通过ajax完成邮箱用户注册、激活账号

    一.图片验证码 django-simple-captcha配置 1.在pycharm中,File====>Settings====>Project:项目名====>Project I ...

随机推荐

  1. DatePickerDialog TimePickerDialog

    MainActivity.java        public class MainActivity extends Activity   {       @Override       public ...

  2. Spring3.x错误--Pointcut is not well-formed:expecting 'name pattern' at...

    Spring3.x错误: 解决方法: (*com.dayang.service..*(..))     *和com.dayang.之间有空格

  3. Windows could not set the offline local information.Error code:0X80000001解决方法

    我的笔记本是联想Y460(白色) 昨天在重装系统的时候遇到如下错误:Windows could not set the offline local information.Error code:0X8 ...

  4. 几个经典的数学库之一学习---VCGlib(2)

    几个经典的数学库之一学习---VCGlib(2) 1. Optional Component(可选的组件) 有许多Vertex和Face的属性并不是一直都是必要的,如Face-Face的邻接关系.VC ...

  5. Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

    Breaseman算法绘制圆形|中点算法绘制圆形_程序片段 1. Breaseman算法绘制圆形程序 由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制. void CCGProjectWo ...

  6. SwapBuffers的等待,虚伪的FPS(转)

    FPS在实时渲染中扮演着一个重要的角色,也许你会去笑一个不懂FPS是什么的游戏新手,但也许,这只是五十步笑一百步罢了.你能读懂SwapBuffers的深情等待吗?——ZwqXin.com frames ...

  7. Android-控制整个APP的异常收集与处理

    控制整个App的异常收集与处理,使用前记得要在Application中初始化initCrasHandler CrasHandler APP异常收集类: package common.library.e ...

  8. 集体智慧编程-discovering groups

    这一章讲的是利用聚集算法对blog进行分类. 首先是构造数据,找到一组blog,每个blog包含一组单词.这样就形成了(blog-name, word*)*的数据结构. 在构造该数据结构的过程中,还需 ...

  9. UEditor编辑器两个版本任意文件上传漏洞分析

    0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...

  10. 如何读取maven项目中的resources

    建立一个maven web项目,project-name/src/main下面有3个目录,java.resources.webapp java中存放java源代码,package等 resources ...