注册时邮箱激活功能的实现思想
在数据库表中添加一个用来检测用户是否注册的状态值,注册的成功的时候,在数据库中添加一个随机生成的一串code,通过获取到的前端的邮箱实现自动发送邮件的功能。当用户完成注册就将其状态值改变并删除随机生成的code
servlet实现代码
Map<String ,String[]> map = request.getParameterMap();
User user=new User();
MyBeanUtils.populate(user, map);
//获取随机生成的id
user.setUid(UUIDUtils.getId());
//获取随机生成的code
user.setCode(UUIDUtils.getCode());
//设置初始状态吗
user.setState(0);
UserService userService=new UserServiceImp();
try {
userService.uerRegist(user);
request.setAttribute("msg","用户注册成功,请激活");
MailUtils.sendMail(user.getEmail(), user.getCode());
} catch (Exception e) {
// TODO: handle exception
request.setAttribute("msg","用户注册失败,请重新注册");
}
return "/jsp/info.jsp";
}
public String active(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取去code值
String code=request.getParameter("code");
//调用service方法判断是否激活成功
UserService userService=new UserServiceImp();
boolean check=userService.userActive(code);
//根据返回的布尔值进行相应的跳转
if(check){
request.setAttribute("msg", "用户激活成功,请登录!");
return "/jsp/login.jsp";
}else{
request.setAttribute("msg", "用户激活失败,请重新激活!");
return "/jsp/info.jsp";
}
} ```
## 用到的工具
### 随机生成代码
==package cn.itcast.store.utils;
import java.util.UUID;
public class UUIDUtils {
/**
* 随机生成id
* @return
*/
public static String getId(){
return UUID.randomUUID().toString().replace("-", "").toUpperCase();
}
public static String getUUID64(){
return getId()+getId();
}
/**
* 生成随机码
* @return
*/
public static String getCode(){
return getId();
}
public static void main(String[] args) {
System.out.println(getId());
}
}==
### 邮箱发送器
package cn.itcast.store.utils;
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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class MailUtils {
public static void sendMail(String email, String emailMsg)
throws AddressException, MessagingException {
// 1.创建一个程序与邮件服务器会话对象 Session
Properties props = new Properties();
//设置发送的协议
//props.setProperty("mail.transport.protocol", "SMTP");
//设置发送邮件的服务器
//props.setProperty("mail.host", "smtp.126.com");
//props.setProperty("mail.smtp.auth", "true");// 指定验证为true
// 创建验证器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
//设置发送人的帐号和密码
return new PasswordAuthentication("admin@store.com", "root");
}
};
Session session = Session.getInstance(props, auth);
// 2.创建一个Message,它相当于是邮件内容
Message message = new MimeMessage(session);
//设置发送者
message.setFrom(new InternetAddress("admin@store.com"));
//设置发送方式与接收者
message.setRecipient(RecipientType.TO, new InternetAddress(email));
//设置邮件主题
message.setSubject("用户激活");
// message.setText("这是一封激活邮件,请<a href='#'>点击</a>");
String url="http://localhost:8080/store_07/UserServlet?method=active&code="+emailMsg;
String content="<h1>来自购物天堂的激活邮件!激活请点击以下链接!</h1><h3><a href='"+url+"'>"+url+"</a></h3>";
//设置邮件内容
message.setContent(content, "text/html;charset=utf-8");
// 3.创建 Transport用于将邮件发送
Transport.send(message);
}
public static void main(String[] args) throws AddressException, MessagingException {
MailUtils.sendMail("aaa@store.com", "1234567890");
System.out.println("OK");
}
}