springboot异步发送邮件

开发过程中碰到这样一个问题:用户忘记密码后通过邮箱找回,需要向邮箱中发送一个验证码,但是发送验证码的接口耗时达到了20秒,觉得这样不太合理,点击发送邮件按钮后要等待图标转20秒,于是对发送邮箱的方法加上异步处理,执行到发送邮件的方法后,不用等待邮件发送成功,提前返回操作成功,提示用户邮件发送可能有延迟。
首先将发送邮件的代码标注出来:

/**
     * 找回密码发送邮件
     *
     * @param email
     */
    @GetMapping("/sendGetBackPwdMail")
    public Object sendGetBackPwdMail(String email) {
        if (StrUtil.isEmpty(email)) {
            return ResultUtil.error("请输入邮箱地址");
        }
        if (!Validator.isEmail(email)) {
            return ResultUtil.error("邮箱地址格式有误");
        }
        List<SysUser> sysUserList = userService.list(new QueryWrapper<SysUser>().eq("email", email));
        if (sysUserList == null || sysUserList.size() == 0) {
            return ResultUtil.error("该邮箱未注册");
        }
        //生成随机六位数字验证码
        String randomNum = RandomUtil.randomNumbers(6);
        //存入redis
        redisTemplate.opsForValue().set(Constant.GET_BACK_PWD + email, randomNum, 10, TimeUnit.MINUTES);

		//该方法为发送邮件的方法 在实现类中添加了异步注解  异步执行
        mailService.sendSimpleMail(email, "xxxx系统修改密码", "您正在进行找回密码操作,验证码是" + randomNum + ",验证码有效期为10分钟。");


        return ResultUtil.success();
    }

以下是实现类的发送邮件方法:

/**
     * 简单文本邮件
     *
     * @param to      收件人
     * @param subject 主题
     * @param content 内容
     */
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        //创建SimpleMailMessage对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件发送人
        message.setFrom(from);
        //邮件接收人
        message.setTo(to);
        //邮件主题
        message.setSubject(subject);
        //邮件内容
        message.setText(content);
        //发送邮件
        mailSender.send(message);
    }

实现步骤:
1、在接口的控制类上添加注解:

@EnableAsync  //这里加上注解 代表开启异步
@RestController
@RequestMapping("/simple/exclude")
public class ExcludeController {

2、在发送邮件的方法上添加注解

/**
     * 简单文本邮件
     * 加入异步注解 异步执行该方法
     *
     * @param to      收件人
     * @param subject 主题
     * @param content 内容
     */
    @Override
    @Async//添加该注解  代表该方法异步执行
    public void sendSimpleMail(String to, String subject, String content) {
        System.out.println("异步任务:发送邮件开始执行");
        //创建SimpleMailMessage对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件发送人
        message.setFrom(from);
        //邮件接收人
        message.setTo(to);
        //邮件主题
        message.setSubject(subject);
        //邮件内容
        message.setText(content);
        //发送邮件
        mailSender.send(message);
        System.out.println("异步任务:发送邮件执行完毕");
    }

添加以上两个注解后,即可异步发送邮件,不用等到邮件发送完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值