关于web项目注册功能时的邮件激活工具类分享

工具类代码:

package cn.itcast.travel.util;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
* 发邮件工具类
*/
public final class MailUtils {
private static final String USER = ""; // 发件人称号,同邮箱地址
private static final String PASSWORD = ""; // 如果是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("itcast_xian@163.com","你好,这是一封测试邮件,无需回复。","测试邮件");
System.out.println("发送成功");
}

}

 

 

 

实现案例:

邮件激活

为什么要进行邮件激活?为了保证用户填写的邮箱是正确的。将来可以推广一些宣传信息,到用户邮箱中。

1)发送邮件要开启授权码,将授权码写入发件password

使用发邮件的工具MailUtils类,调用其中的sendMail方法进行发送邮件

 

 

 

 

2)用户点击邮件激活()

用户激活其实就是修改用户表中的status为‘Y

分析:

UserDao:

主要功能执行更新statuscodesql

UserService

调用Dao

Servlet

  1. 获取激活码
  2. 判断是否有激活码
  3. 根据激活码查询User对象
  4. 判断对象是否为null,不为null就调用service方法激活,也就是更改激活码。

发送邮件代码:

 

 

 

修改保存Dao代码,加上存储statuscode 的代码逻辑

 

 

 

激活代码实现:

ActiveUserServlet

//1.获取激活码
String code = request.getParameter("code");
if(code != null){
    //2.调用service完成激活
    UserService service = new UserServiceImpl();
    boolean flag = service.active(code);

    //3.判断标记
    String msg = null;
    if(flag){
        //激活成功
        msg = "激活成功,请<a href='login.html'>登录</a>";
    }else{
        //激活失败
        msg = "激活失败,请联系管理员!";
    }
    response.setContentType("text/html;charset=utf-8");
    response.getWriter().write(msg);

UserServiceactive

@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;
    }

}

UserDaofindByCode updateStatus

/**
 * 根据激活码查询用户对象
 * @param code
 * @return
 */
@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) {
        e.printStackTrace();
    }

    return user;
}

/**
 * 修改指定用户激活状态
 * @param user
 */
@Override
public void updateStatus(User user) {
    String sql = " update tab_user set status = 'Y' where uid=?";
    template.update(sql,user.getUid());
}

posted @ 2022-02-11 19:21  古家杰  阅读(271)  评论(0)    收藏  举报