Java 注册时发送激活邮件和激活的实现示例

Java 注册时发送激活邮件和激活的实现示例

最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用

1.RegisterController.java

package com.app.web.controller;
import java.text.ParseException;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.app.service.impl.RegisterValidateService;
import com.app.tools.ServiceException;

@Controller
public class RegisterController {

  @Resource
  private RegisterValidateService service;

  @RequestMapping(value="/user/register",method={RequestMethod.GET,RequestMethod.POST})
  public ModelAndView load(HttpServletRequest request,HttpServletResponse response) throws ParseException{
    String action = request.getParameter("action");
    ModelAndView mav=new ModelAndView();
    if("register".equals(action)) {
      //注册
      String email = request.getParameter("email");
      service.processregister(email);//发邮箱激活
      mav.addObject("text","注册成功");
      mav.setViewName("register/register_success");
    }
    else if("activate".equals(action)) {
      //激活
      String email = request.getParameter("email");//获取email
      String validateCode = request.getParameter("validateCode");//激活码
      try {
        service.processActivate(email , validateCode);//调用激活方法
        mav.setViewName("register/activate_success");
      } catch (ServiceException e) {
        request.setAttribute("message" , e.getMessage());
        mav.setViewName("register/activate_failure");
      }
    }
    return mav;
  }

}

2.RegisterValidateService.java

package com.app.service.impl;
import java.text.ParseException;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.app.dao.UserDao;
import com.app.tools.MD5Tool;
import com.app.tools.MD5Util;
import com.app.tools.SendEmail;
import com.app.tools.ServiceException;
import com.code.model.UserModel;

@Service
public class RegisterValidateService {

  @Autowired
  private UserDao userDao;

  /**
   * 处理注册
  */
  public void processregister(String email){
    UserModel user=new UserModel();
    Long as=5480l;
    user.setId(as);
    user.setName("xiaoming");
    user.setPassword("324545");
    user.setEmail(email);
    user.setRegisterTime(new Date());
    user.setStatus(0);
    ///如果处于安全,可以将激活码处理的更复杂点,这里我稍做简单处理
    //user.setValidateCode(MD5Tool.MD5Encrypt(email));
    user.setValidateCode(MD5Util.encode2hex(email));

    userDao.save(user);//保存注册信息

    ///邮件的内容
    StringBuffer sb=new StringBuffer("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");
    sb.append("<a href=\"http://localhost:8080/springmvc/user/register?action=activate&email=");
    sb.append(email);
    sb.append("&validateCode=");
    sb.append(user.getValidateCode());
    sb.append("\">http://localhost:8080/springmvc/user/register?action=activate&email=");
    sb.append(email);
    sb.append("&validateCode=");
    sb.append(user.getValidateCode());
    sb.append("</a>");

    //发送邮件
    SendEmail.send(email, sb.toString());
    System.out.println("发送邮件");

  }

  /**
   * 处理激活
   * @throws ParseException
   */
   ///传递激活码和email过来
  public void processActivate(String email , String validateCode)throws ServiceException, ParseException{
     //数据访问层,通过email获取用户信息
    UserModel user=userDao.find(email);
    //验证用户是否存在
    if(user!=null) {
      //验证用户激活状态
      if(user.getStatus()==0) {
        ///没激活
        Date currentTime = new Date();//获取当前时间
        //验证链接是否过期
        currentTime.before(user.getRegisterTime());
        if(currentTime.before(user.getLastActivateTime())) {
          //验证激活码是否正确
          if(validateCode.equals(user.getValidateCode())) {
            //激活成功, //并更新用户的激活状态,为已激活
            System.out.println("==sq==="+user.getStatus());
            user.setStatus(1);//把状态改为激活
            System.out.println("==sh==="+user.getStatus());
            userDao.update(user);
          } else {
            throw new ServiceException("激活码不正确");
          }
        } else { throw new ServiceException("激活码已过期!");
        }
      } else {
        throw new ServiceException("邮箱已激活,请登录!");
      }
    } else {
      throw new ServiceException("该邮箱未注册(邮箱地址不存在)!");
    } 

  }
}
  

3.UserModel.java

package com.code.model;
import java.beans.Transient;
import java.util.Calendar;
import java.util.Date;

public class UserModel {
  private Long id;
 private String name;
 private String password;
 private String email;//注册账号
 private int status=0;//激活状态
 private String validateCode;//激活码
 private Date registerTime;//注册时间

  /////////////////
  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public int getStatus() {
    return status;
  }

  public void setStatus(int status) {
    this.status = status;
  }

  public String getValidateCode() {
    return validateCode;
  }

  public void setValidateCode(String validateCode) {
    this.validateCode = validateCode;
  }

  public Date getRegisterTime() {
    return registerTime;
  }

  public void setRegisterTime(Date registerTime) {
    this.registerTime = registerTime;
  }
  /////////////////////////
  @Transient
  public Date getLastActivateTime() {
    Calendar cl = Calendar.getInstance();
    cl.setTime(registerTime);
    cl.add(Calendar.DATE , 2);

    return cl.getTime();
  }

}

4.SendEmail.java

package com.app.tools;
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.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmail {

  public static final String HOST = "smtp.163.com";
  public static final String PROTOCOL = "smtp";
  public static final int PORT = 25;
  public static final String FROM = "xxxxx@xx.com";//发件人的email
  public static final String PWD = "123456";//发件人密码

  /**
   * 获取Session
   * @return
   */
  private 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(FROM, PWD);
      }

    };
    Session session = Session.getDefaultInstance(props , authenticator);

    return session;
  }

  public static void send(String toEmail , String content) {
    Session session = getSession();
    try {
      System.out.println("--send--"+content);
      // Instantiate a message
      Message msg = new MimeMessage(session);

      //Set message attributes
      msg.setFrom(new InternetAddress(FROM));
      InternetAddress[] address = {new InternetAddress(toEmail)};
      msg.setRecipients(Message.RecipientType.TO, address);
      msg.setSubject("账号激活邮件");
      msg.setSentDate(new Date());
      msg.setContent(content , "text/html;charset=utf-8");

      //Send the message
      Transport.send(msg);
    }
    catch (MessagingException mex) {
      mex.printStackTrace();
    }
  }
}

5.jsp页面  

registerEmailValidae.jsp

<h2>注册激活</h2>
<form action="user/register?action=register" method="post">
   Email:<input type="text" id="email" name="email" value="" >
   <input type="submit" value="提交">
</form>

register_success.jsp

<body>
  恭喜你注册成功!请到注册的邮箱点击链接激活!
 </body>

activate_success.jsp:

<body>
  账号激活成功,点击这里去登录!
 </body>

activate_failure.jsp:

<body>
  激活失败!错误信息:${message }
</body>

以上就是Java 注册时发送激活邮件和激活的简单实例,如有疑问请留言讨论,共同进步,关于java开发的文章本站还有很多,

欢迎大家,搜索参阅,谢谢大家对本站的支持!

(0)

相关推荐

  • javamail实现注册激活邮件

    本文实例为大家分享了javamail注册激活邮件的具体代码,供大家参考,具体内容如下 需要的jar包 1.MySQL驱动包 2.mail.jar包 SMTP和POP3协议概述 SMTP协议称为简单邮件传输协议,是一组用于从原地址到目的地址传送邮件的规则,由它来控制信件的中转方式.SMTP协议属于TCP/IP的协议簇,SMTP是负责邮件服务器之间的寄信的通信协定 POP3协议称为邮局协议版本3,也是TCP/IP协议簇的一员,基于POP3协议的服务器是用来接收信件的.每个Email地址一般只有一个如

  • Java 注册时发送激活邮件和激活的实现示例

    Java 注册时发送激活邮件和激活的实现示例 最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 1.RegisterController.java package com.app.web.controller; import java.text.ParseException; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http

  • Java实现后台发送及接收json数据的方法示例

    本文实例讲述了Java实现后台发送及接收json数据的方法.分享给大家供大家参考,具体如下: 本篇博客试用于编写java后台接口以及两个项目之间的接口对接功能: 具体的内容如下: 1.java后台给指定接口发送json数据 package com.utils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Htt

  • .net SMTP发送Email邮件且可带附件示例

    复制代码 代码如下: public static void sendEmail(string toAddress, string emailbody) { var fromAddress = ConfigurationManager.AppSettings["EmailAddress"]; string fromPassword = ConfigurationManager.AppSettings["EmailPassword"].ToString(); const

  • Python定时发送天气预报邮件代码实例

    这篇文章主要介绍了Python定时发送天气预报邮件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用python爬虫爬到的天气预报,使用smtplib和email模块可以发送到邮箱,使用schedule模块可以定时发送.以下是代码- #导入模块 import requests from bs4 import BeautifulSoup import smtplib from email.mime.text import MIMEText

  • Java注册邮箱激活验证实现代码

    最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java 复制代码 代码如下: package com.app.service.impl; import java.text.ParseException;import java.util.Date; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stere

  • java网上商城开发之邮件发送功能(全)

    最近在学习网上商城时,接触到了一个邮件发送的功能.之前一直在使用邮箱进行发送邮件,但是其中的具体如何运转的却不知道是怎么回事.那么邮件发送究竟是怎么一回事呢? 邮件发送过程: 过程描述:首先是发送人将邮件通过客户端软件发送到特定的服务器上,然后通过电子邮件简单传输协议(SMTP)来进行传输,收件人通过POP3协议将邮件从服务器上接受回来.这样就实现了邮件之间的相互传送. 实现过程: 在有网络的情况下,我们可以直接使用搜狐.网易等邮箱进行发送.那么如何在没有网络的情况下,实现内部之间的发送呢? 首

  • PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程

    PHP+Ajax检测用户名或邮件注册时是否已经存在是论坛或会员系统中常见的一个重要功能.本文就以实例形式简单描述这一功能的实现方法.具体步骤如下: 一.PHP检测页面 check.php页面代码如下: <script type="text/javascript" src="jiance.js"></script> <form name="myform" action="" method="

  • Java实现批量发送带附件的邮件代码

    目录 前言 实体类(注意注释) 实现类 方法中调用,详情如下: 总结 前言 新功能上线时要经常发包到测试或生产服务器进行模块部署,但由于安全限制只能通过邮件传输小于10M的附件这种方式把jar包上传到服务器.所以往往要发送几十个邮件手动发送比较麻烦,偷懒写了个粘贴即用的Demo,如有不足,请多指教! 实体类(注意注释) 代码详情如下: package Email; /* * 参数实体类 * */ public class EmailParameter { //发信邮箱 private Strin

  • java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载.目前最新版本是JavaMail1.5.0,下面我们来看看javamail发送带附件的邮件实例 mail.java 代码: 复制代码 代码如下: package mail;

随机推荐