首页 > Java > java教程 > Java如何实现用户注册时发送邮件激活?

Java如何实现用户注册时发送邮件激活?

黄舟
发布: 2017-07-17 09:54:23
原创
1691 人浏览过

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

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

1.RegisterController.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

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

1

2

3

4

5

<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

1

2

3

<body>

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

 </body>

登录后复制

activate_success.jsp:

1

2

3

<body>

  账号激活成功,点击这里去登录!

 </body>

登录后复制

activate_failure.jsp:

1

2

3

<body>

  激活失败!错误信息:${message }

</body>

登录后复制

以上是Java如何实现用户注册时发送邮件激活?的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板