欢迎来到Java学习网!
设为首页 | 加入收藏
当前位置: 首页 > Java语言 > Java教程 >
在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性。形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注册。

最近项目中也用到这个需求,做了个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", "123456@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("123456@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;
        }
    }
}

当用户注册时

1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例);
2、添加一条用户记录;
3、向用户发送激活邮件。

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