Skip to content

介绍

基于redis实现邮件登录

引入依赖

ts
<dependency>
  <groupId>cn.zvo.email</groupId>
  <artifactId>email</artifactId>
  <version>1.0</version>
</dependency>

发送邮件

下面是一个发送随机验证码到指定邮箱,并存入redis中的示例:

ts
private static final String LOGIN_PREFIX = "loginCode";

public Boolean sendEmail(User user) {
        String host = "smtp.163.com";
        String username = "xxx@163.com"; //您的163邮箱
        String password = "xxx";     //您的163邮箱授权码,不是邮箱密码
        Email mail = new Email(host, username, password); //创建
        String email = user.getEmail();
        Random random = new Random();
        int verificationCode = random.nextInt(900000) + 100000;
        String codeKey = redisUtil.buildKey(LOGIN_PREFIX, user.getEmail());
        redisUtil.setNx(codeKey, String.valueOf(verificationCode), 5L, TimeUnit.MINUTES);
        String CodeContent = "您的注册验证码为:" + verificationCode + "该验证码5分钟内有效,请及时验证。";
        mail.sendHtmlMail(email, "验证你的电子邮件地址", CodeContent);
        return true;
    }

验证邮箱验证码并登录

ts
public SaTokenInfo elogin(User user) {
    if (StringUtils.isBlank(user.getEmail()) || StringUtils.isBlank(user.getCode())) {
        return null;
    }
    String tEmail = redisUtil.buildKey(LOGIN_PREFIX, user.getEmail());
    String code = redisUtil.get(tEmail);
    if (StringUtils.isBlank(code)) {
        return null;
    } else if (code.equals(user.getCode())) {
        StpUtil.login(user.getEmail());
        SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
        log.info("登录成功!token{}", tokenInfo.getTokenValue());
        return tokenInfo;
    }
    return null;
}

拓展

可以发送html格式的邮件给用户

上次更新于: