java发送邮箱模板

springboot3三层架构,基于session的邮箱验证

数据库:redis和mysql

实体类:

@Data
//json格式实体类
public class Result<T> {
    private Integer code;
    private boolean success;
    private T message;

    public Result(Integer code, boolean success, T message) {
        this.code = code;
        this.success = success;
        this.message = message;
    }

    public static <T> Result<T> success(){
        return new Result<>(0,true,null);
    }


    public static <T> Result<T> success(T data){
        return new Result<>(0,true,data);
    }


    public static <T> Result<T> error(T message){
        return new Result<>(1,false,message);
    }
}

控制层逻辑:

第一步:接受从接口获取的两个关键字(为什么是email,和session)

PS:email是我们发送验证码的关键,就和手机号一样(手机号要钱。。。)session是为了安全

第二步:实现业务接口中的发送邮箱逻辑(为什么封装成一个字符串)

PS:这个是根据你的接口返回值

String sendValidateEmail(String email,String session);这条代码

第三步:返回成功后的内容,和失败后的内容

@Validated
@RestController
@RequestMapping("/api/auth")
public class userController {

    @Resource
    userService service;
    //userservice接口

@PostMapping("/valid-Email")
    public Result<String> validEmail(@Email @RequestParam("email")String email, HttpSession session){
        String s = service.sendValidateEmail(email, session.getId());
        if (s == null){
            return Result.success("发送成功");
        }
        else  return Result.error(s);
    }
}

业务接口,返回字符串

public interface userService{   
//发送email
 String sendValidateEmail(String email,String session);
}

实现业务逻辑

第一步:将获取的数据封装成一个字符串

第二步:判断rides中是否有这个字符串,如果有返回提示

第三步:封装一个随机整数

第四步:调用SimpleMailMessage simpleMailMessage = new SimpleMailMessage();方法

实现发送邮件

第五步:异常处理,成功发送邮箱,传入redis数据库内容

@Service
public class userServiceImpl implements userService {
    //UserMapping层,已实现查询
    @Resource
    userMapping mapping;

    //邮件发送器
    @Resource
    MailSender mailSender;

    //待定:redis处理器
    @Resource
    StringRedisTemplate template;
 
/*
  1.生成对应的验证码(生成数据)
  2.将邮箱和验证码以对象的形式储存
  3.存储在redis里面(过期时间为60秒,)
  4.将验证码发送到对应的邮箱
  5.发送失败就删除存储内容
  6,当用户成功时,取出数据
  7. 进行验证
  */
    @Override
    public String sendValidateEmail(String email, String session) {
        //数据搬运工,将key搬运来
        String key = "email:" + session + ":" + email;
        //处理数据,深加工,
        if (Boolean.TRUE.equals(template.hasKey(key))) {
            Long expire = Optional.ofNullable(template.getExpire(key, TimeUnit.SECONDS)).orElse(0L);
            if (expire > 120)
                return "请稍后再试!";
        }
        Random random = new Random();
        int code = random.nextInt(899999) + 10000;
//调用随机方法,随机发送验证码
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom("您的邮箱");
        simpleMailMessage.setTo(email);
        simpleMailMessage.setSubject("您的安全验证邮件");
        simpleMailMessage.setText("验证码:" + code);
        try {
                mailSender.send(simpleMailMessage);
                template.opsForValue().set(key, String.valueOf(code), 3, TimeUnit.MINUTES);
//将值传入redis中
                return "发送成功";
        } catch (MailException e) {
            e.printStackTrace();
            return "发送失败";
        }
    }
}

mapper

@Mapper
public interface userMapping {
    //获取数据
    @Select("select * from romachen.user where username = #{message} OR email = #{message}")
    userEntity userByAdmitOREmail(String message);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值