922~926 注册功能,邮件激活分析,发送邮件,点击激活分析,代码实现
邮件激活
为什么要进行邮件激活?
为了保证用户填写的邮箱是正确的。将来可以推广一些宣传信息,到用户邮箱中。

发送邮件
1.申请邮箱


2.开启搜全码
邮件工具类:MailUtils,调用其中sendMail方法可以完成邮件发送
3.在MailUtils中设置自己的邮箱账号和密码(授权码)
public final class MailUtils {
private static final String USER = "gzq2260@foxmail.com"; // 发件人称号,同邮箱地址
private static final String PASSWORD = "eyznhkkfkhrxeaah"; // 如果是qq邮箱可以使户端授权码,或者登录密码
/**
*
* @param to 收件人邮箱
* @param text 邮件正文
* @param title 标题
*/
/* 发送验证信息的邮件 */
public static boolean sendMail(String to, String text, String title){
try {
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
// 发件人的账号
props.put("mail.user", USER);
//发件人的密码
props.put("mail.password", PASSWORD);
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
// 设置收件人
InternetAddress toAddress = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO, toAddress);
// 设置邮件标题
message.setSubject(title);
// 设置邮件的内容体
message.setContent(text, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
return true;
}catch (Exception e){
e.printStackTrace();
}
return false;
}
public static void main(String[] args) throws Exception { // 做测试用
MailUtils.sendMail("gzq2260@foxmail.com","你好,这是一封测试邮件,无需回复。","测试邮件");
System.out.println("发送成功");
}
}


用户点击邮件激活
经过分析,发现,用户激活其实就是修改用户表中的status为‘Y’


发送邮件
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override//注册用户
public boolean regist(User user) {
//1.根据用户名查询用户对象
User u = userDao.findByUsername(user.getUsername());
//u是否为null
if (u !=null){
//用户名存在,注册失败
return false;
}
//2.保存用户信息,添加
//2.1设置激活码,唯一字符串
user.setCode(UuidUtil.getUuid());
//2.2设置激活状态
user.setStatus("N");
userDao.save(user);
//激活邮件发送,邮件正文
String content = "<a href='http://localhost/travel/activeUserServlet?code+"+user.getCode()+"'>点击激活</a>";
MailUtils.sendMail(user.getEmail(),content,"邮件激活");
return true;
}
}
修改Dao代码加上 user.getStatus(),user.getCode()
@Override//用户保存,添加
public void save(User user) {
//1.定义sql
String sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email) values(?,?,?,?,?,?,?,?,?)";
//2.执行sql
template.update(sql,user.getUsername(),
user.getPassword(),
user.getName(),
user.getBirthday(),
user.getSex(),
user.getTelephone(),
user.getEmail(),
user.getStatus(),
user.getCode()
);
}
激活代码实现
UserServiceImpl
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override//注册用户
public boolean regist(User user) {
//1.根据用户名查询用户对象
User u = userDao.findByUsername(user.getUsername());
//u是否为null
if (u !=null){
//用户名存在,注册失败
return false;
}
//2.保存用户信息,添加
//2.1设置激活码,唯一字符串
user.setCode(UuidUtil.getUuid());
//2.2设置激活状态
user.setStatus("N");
userDao.save(user);
//激活邮件发送,邮件正文
String content = "<a href='http://localhost/travel/activeUserServlet?code="+user.getCode()+"'>点击激活</a>";
MailUtils.sendMail(user.getEmail(),content,"邮件激活");
return true;
}
@Override//激活用户
public boolean active(String code) {
//1.根基激活码查询用户对象
User user = userDao.findByCode(code);
if (user != null){
//2.调用dao的修改激活状态的方法
userDao.updateStatus(user);
return true;
}else {
return false;
}
}
}
UserService
public interface UserService {
boolean regist(User user);//注册用户
boolean active(String code);//激活用户
}
UserServiceImpl
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override//注册用户
public boolean regist(User user) {
//1.根据用户名查询用户对象
User u = userDao.findByUsername(user.getUsername());
//u是否为null
if (u !=null){
//用户名存在,注册失败
return false;
}
//2.保存用户信息,添加
//2.1设置激活码,唯一字符串
user.setCode(UuidUtil.getUuid());
//2.2设置激活状态
user.setStatus("N");
userDao.save(user);
//激活邮件发送,邮件正文
String content = "<a href='http://localhost/travel/activeUserServlet?code="+user.getCode()+"'>点击激活</a>";
MailUtils.sendMail(user.getEmail(),content,"邮件激活");
return true;
}
@Override//激活用户
public boolean active(String code) {
//1.根基激活码查询用户对象
User user = userDao.findByCode(code);
if (user != null){
//2.调用dao的修改激活状态的方法
userDao.updateStatus(user);
return true;
}else {
return false;
}
}
}
UserDao
public interface UserDao {
public User findByUsername(String username);//根据用户名查询用户信息
public void save(User user);//用户保存,添加
User findByCode(String code); //根基激活码查询用户对象
void updateStatus(User user);//调用dao的修改激活状态的方法
}
UserDaoImpl
@Override//根据激活码查询用户对象
public User findByCode(String code) {
User user = null;
try {
String sql = "select * from tab_user where code = ?";
user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), code);
} catch (DataAccessException e) {
throw new RuntimeException(e);
}
return user;
}
@Override//修改指定用户激活状态
public void updateStatus(User user) {
String sql = "update tab_user set status = 'Y' where uid=?";
template.update(sql,user.getUid());
}
}
status从N变Y为完成功能

激活成功,点击登录即可


浙公网安备 33010602011771号