步骤:
1.调用后台在数据库里新增用户,(应有三个栏位:激活状态,激活码,有效时间)

DWR前端:userService.register(u,function(){...})
//-------------------------------------public User register(User user) throws AddressException, NoSuchAlgorithmException, MessagingException{User u = this.loadByEmail(user.getEmail());//验证数据库是否存在,避免重复邮箱注册if(u==null) {//MD5密码加密user.setPassword(SecurityUtil.md5(user.getPassword()));//初始化属性user.setStatus(0);user.setType("student");user.setPower(0);user.setLevel(0);//调用发送邮件服务--函数在步骤2user = MailUtil.activateMail(user);this.add(user);}return u;}

2.发送邮件

public class MailUtil{
public static final String FROM = "zhengzran@163.com";//发件人的emailpublic static final String PWD = "******";//发件人密码--邮箱密码public static final String URL = "http://localhost:8888/iclass";//项目主页public static final int TIMELIMIT = 1000*60*60*24; //激活邮件过期时间24小时public static final String TITLE = "iClass账户激活邮件";public static final String HOST = "smtp.163.com";public static final String SMTP = "smtp";
//---------------自定义函数-----------------public static User activateMail(User u) throws AddressException, MessagingException, NoSuchAlgorithmException {//注册邮箱String to  = u.getEmail();//当前时间戳Long curTime = System.currentTimeMillis();//激活的有效时间Long activateTime = curTime+TIMELIMIT;//激活码--用于激活邮箱账号String token = to+curTime;u.setToken(SecurityUtil.md5(token));u.setCreateDate(new Date());token = u.getToken();//过期时间u.setActivateTime(activateTime);//发送的邮箱内容String content = "<p>您好 O(∩_∩)O~~<br><br>欢迎加入iClass!<br><br>帐户需要激活才能使用,赶紧激活成为iClass正式的一员吧:)<br><br>请在24小时内点击下面的链接立即激活帐户:"+"<br><a href='"+URL+"/activatemail/?token="+token+"&email="+to+"'>"+URL+"/activatemail/?token="+token+"&email="+to+"</a></p>";//调用发送邮箱服务MailUtil.sendMail(to, TITLE, content);return u;}
//---------------发送邮件-------------------public static void sendMail(String to,String title,String content) throws AddressException, MessagingException {Properties props = new Properties(); //可以加载一个配置文件  // 使用smtp:简单邮件传输协议  props.put("mail.smtp.host", HOST);//存储发送邮件服务器的信息  props.put("mail.smtp.auth", "true");//同时通过验证  Session session = Session.getInstance(props);//根据属性新建一个邮件会话  //session.setDebug(true); //有他会打印一些调试信息。  MimeMessage message = new MimeMessage(session);//由邮件会话新建一个消息对象  message.setFrom(new InternetAddress(FROM));//设置发件人的地址  message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//设置收件人,并设置其接收类型为TO  message.setSubject(title);//设置标题  //设置信件内容  //message.setText(mailContent); //发送 纯文本 邮件 todo  message.setContent(content, "text/html;charset=gbk"); //发送HTML邮件,内容样式比较丰富  message.setSentDate(new Date());//设置发信时间  message.saveChanges();//存储邮件信息  //发送邮件  Transport transport = session.getTransport(SMTP);  //Transport transport = session.getTransport();  transport.connect(FROM, PWD);transport.sendMessage(message, message.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址  transport.close();  }

如果前面顺利的话,就会收到如下的激活邮件:

3.激活邮箱账号

//SpringMVC的映射@RequestMapping("/activatemail")public  String hello(HttpServletRequest request,Model model) throws IOException, AddressException, MessagingException, NoSuchAlgorithmException {//获取激活参数String email = request.getParameter("email");String token = request.getParameter("token");Long time = System.currentTimeMillis();User u = userService.loadByEmail(email);UserDTO ud = new UserDTO();ud.setMail(email);if(u!=null) {ud.setEmail(1);if(u.getStatus()==0&&u.getActivateTime()!=1) {if(u.getActivateTime()<time) {//过期--激活失败u.setActivateTime(Long.parseLong("-1"));//重新发送激活邮件u = MailUtil.activateMail(u);//重新设置了有效时间和token激活码userService.updateUser(u);ud.setTime(-1);model.addAttribute("user", JsonUtil.toJson(ud));//resp.getWriter().write(JsonUtil.toJson(u));} else if (u.getActivateTime()>time){//在时间内u.setActivateTime(Long.parseLong("1"));ud.setTime(1);if(u.getToken().equals(token)) {//在时间内且激活码通过,激活成功u.setStatus(1);u.setCreateDate(new Date());//重新设置token防止被禁用的用户利用激活u.setToken(token.replace("1", "c"));u.setType("student");userService.updateUser(u);ud.setToken(1);ud.setStatus(1);model.addAttribute("user", JsonUtil.toJson(ud));//resp.getWriter().write(JsonUtil.toJson(u));} else {//在时间内但是且激活码错误ud.setToken(-1);model.addAttribute("user", JsonUtil.toJson(ud));}}//u.getStatus()!=1判断结束} else if(u.getStatus()==1) {//已经被激活的重复点链接ud.setStatus(-1);model.addAttribute("user", JsonUtil.toJson(ud));}//u为空} else if(u==null) {ud.setEmail(-1);model.addAttribute("user", JsonUtil.toJson(ud));}return "activatemail";}

基本完成了邮箱验证注册功能,不同的框架可能会有一些差别,但原理基本是一样的,
注意,发送邮箱的账号需要把smtp服务打开,163邮箱默认就是打开的。

Javaweb邮箱验证注册的实现相关推荐

  1. 通过邮箱验证注册——.net代码

    在写一些面向用户的网站类的程序时,必不可少的一个就是注册,通常情况下,我们会选择邮箱验证后注册,或者手机发送验证码注册.上篇文章中已经简单的描述了手机验证注册,这篇主要介绍一下邮箱验证. 邮箱验证的步 ...

  2. laravel——实现Email形式的邮箱验证注册以及登陆功能

    正文 任务确认 具体操作 实现在laravel下呈现登陆注册按钮 实现点击登陆注册以后确保有相应的功能实现 测试是否能发送邮件 最终可以实现通过邮箱机制来注册 实现忘记密码重置的功能 任务确认 1.实 ...

  3. JavaMail实现注册邮箱验证案例

    原文链接:https://www.jianshu.com/p/8f8d7a46888f 在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件来验证,邮件的话大 ...

  4. JavaWeb实现qq邮箱验证(一)

    需求:用户注册时给邮箱发送邮件,得到验证码并填写,进行激活邮箱. 有基础的可以直接看下篇 JavaWeb实现qq邮箱验证(二):https://blog.csdn.net/BlackPlus28/ar ...

  5. JavaWeb邮箱注册激活账号

    JavaWeb邮箱注册激活账号 邮箱工具类MailUtil 用法 注意事项 激活码工具类UuidUtil 用法 邮箱工具类MailUtil /*** 发邮件工具类*/ public final cla ...

  6. php ajax邮箱,PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)

    前 言 直接上代码有点不厚道.于是按照天朝传统,整段描述吧....(本人语言表达能力有限,大家忍着看) 功 能 在网站注册用户时使用,主要为了无刷新异步验证用户输入的用户名或者Email是否已注册. ...

  7. phpcmsV9 邮箱注册:邮箱验证(不改代码、含演示截图) - 配置篇

    phpcmsV9 邮箱注册:邮箱验证(不改代码.含演示截图) - 全程指导 方法一.(网传) · 配置教程 第一步:修改登陆的验证JS 第二步: 修改登录文件 方法二.真机实操 · 教程 [推荐] 1 ...

  8. Laravel8 实现注册新用户时邮箱验证

    Laravel 实现注册新用户时邮箱验证 前期准备 安装需要的组件 配置数据库 配置邮箱 方法一:使用 MailTrap 方法二:使用谷歌邮箱 1. 数据库迁移文件添加字段 2. 发送邮件到用户邮箱 ...

  9. mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能

    1.登录注册思路 这是一个使用spring boot做的一个qq邮箱注册和登录的项目. 没写前端页面,使用postman测试.有截图详细. 1.1.思路 注册:通过输入的邮箱发送验证码,检验前端传来的 ...

  10. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

最新文章

  1. 两天标星2.2K!GitHub 开源自动刷喵币项目?
  2. 接入腾讯云短信服务(史上最详细+该短信服务如何申请成功+发送短信验证码API讲解+相关错误分析)
  3. Python实现softmax函数
  4. 域控制器显示无法使用解决办法
  5. Spring学习笔记:配置单数据源
  6. 乔布斯18岁求职信拍卖价22.24万美元,值吗?
  7. setSystemUiVisibility() 与 getSystemUiVisibility() 显示隐藏状态栏
  8. 开源项目管理系统:ProjectForge
  9. pon移动家庭网关有虚拟服务器吗,电信、移动、联通家庭网关对比分析
  10. Unity 编辑器扩展 子物体材质替换
  11. 天线设计-电感计算以及天线匹配
  12. 在VScode上使用latex编辑pdf
  13. ArcGIS 10.7基础:三种栅格影像裁剪操作
  14. Gentoo 软件包冲突
  15. git 拉取最新代码覆盖本地
  16. 1236: 数的逆转
  17. Puppet自动化分发服务 - 视频课程-龙小威-专题视频课程
  18. 《把时间当作朋友》 - 书评
  19. 第七届ACM趣味编程循环赛 Round #1 - ldq 的遗产题解
  20. 【J2ME资料汇总】48个推荐资料+40个经典源码——下载目录

热门文章

  1. 走进WPF之开发类似Visio软件
  2. 15个开发者最亲睐的Andr​​oid代码编辑器
  3. 对象转换 json 字符串和 json转换对象的几种方式
  4. Ubuntu easypr的配置
  5. 双系统Linux(centos\redhat)和window的安装
  6. 一行 Python 代码,20款经典小游戏
  7. 【Windows优秀软件推荐】:唧唧down——视频和弹幕全清晰度下载
  8. Q新闻丨吃鸡外挂被开源;Dubbo 3.0来了;工信部约谈百度、支付宝、今日头条;内地iCloud服务将转由云上贵州运营...
  9. s7edge 无法连接计算机,s7-200,CPU224CN无法连接到电脑-工业支持中心-西门子中国...
  10. BDA,CDA,CPDA哪个证相对可靠?哪个含金量高?具体考试内容?