java 实现注册时发送激活邮件+激活

时间:2022-06-10
本文章向大家介绍java 实现注册时发送激活邮件+激活,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/48031347

  在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性。形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注册。

  最近项目中也用到这个需求,做了个Demo与大家分享,大至思想如下:

数据库表结构

  用户表t_user有五个字段分别为用户名、密码、邮箱地址、激活码、状态:   | username | password | email |code | state |

核心代码:

  UserManager.java

import java.util.Properties;
import java.util.UUID;
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.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import dao.UserDao;

public class UserManager {

    /**
     * 注册用户 
     * @param username 用户名
     * @param password 密码
     * @param email 邮箱
     * @return 是否注册成功
     */
    public Boolean Register(String username,String password,String email){
        Boolean result=false;
        //生成用户code
        String code=UUID.randomUUID().toString().replace("-", "");

        //添加用户
        UserDao userDao=new UserDao();
        result=userDao.AddUser(username, password, email, code);

        //向用户发送激活邮件
        sendMail(email,code);

        return result;
    }

    /**
     * 发送激活邮件
     * @param to 收件人邮箱地址
     * @param code 激活码
     */
    public static boolean sendMail(String to, String code) {  

        try {  
            Properties props = new Properties();  
            props.put("username", "huyuyang6688@163.com");   
            props.put("password", "123456");   
            props.put("mail.transport.protocol", "smtp" );  
            props.put("mail.smtp.host", "smtp.163.com");  
            props.put("mail.smtp.port", "25" );  

            Session mailSession = Session.getDefaultInstance(props);  

            Message msg = new MimeMessage(mailSession);     
            msg.setFrom(new InternetAddress("huyuyang6688@163.com"));  
            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to));   
            msg.setSubject("激活邮件");   
            msg.setContent("<h1>此邮件为官方激活邮件!请点击下面链接完成激活操作!</h1><h3><a href='http://localhost:8080/SendMail/servlet/ActiveServlet?code="+code+"'>http://localhost:8080/SendMail/servlet/ActiveServlet</a></h3>","text/html;charset=UTF-8");
            msg.saveChanges();  

            Transport transport = mailSession.getTransport("smtp");  
            transport.connect(props.getProperty("mail.smtp.host"), props  
                    .getProperty("username"), props.getProperty("password"));   
            transport.sendMessage(msg, msg.getAllRecipients());  
            transport.close();     
        } catch (Exception e) {  
            e.printStackTrace();  
            System.out.println(e);  
            return false;  
        }  
        return true;  
    }   

    /**
     * 激活用户
     * @param code 用户激活码
     * @return 是否激活成功
     */
    public Boolean Active(String code){
        UserDao userDao=new UserDao();
        String username=userDao.findUserByCode(code);
        if(username!=null && username!=""){
            //如果存在用户,将此用户状态设为可用
            userDao.setState(username);
            return true;
        }else{
            return false;
        }
    }
}

  register.jsp

当用户注册时

  1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例);   2、添加一条用户记录;   3、向用户发送激活邮件。上述代码中的发信人是小编自己的邮箱,一般为企业邮箱。如果有条件的话,这里还向大家推荐一款邮箱服务器——易邮邮件服务器,可以在局域网内建立邮件系统进行测试。

激活邮件如下:

激活

  用户点击邮箱中的链接后,系统根据用户点击链接发来的激活码去数据库中查询与该激活码匹配的用户记录,如果记录存在,则将用户状态更改为可用的状态。

(限于篇幅,这里不贴全部代码,需要的朋友可以点此下载源码