Springboot异步发送邮件验证码

所需maven依赖
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
1.配置文件:

使用前要先去开启POP3/SMTP服务,这里我用的是qq邮箱,操作如下:

在这里插入图片描述开启这个服务之后,会生成一个授权码。记住这个授权码。
在这里插入图片描述
配置application.properties:

#邮件发送邮箱地址
spring.mail.username=你的邮箱地址
#邮箱授权码或密码
spring.mail.password=你的授权码(或者密码)
#服务主机(这里我使用的是qq邮箱)
spring.mail.host=smtp.qq.com
2.开启异步功能

在主程序类加上@EnableAsync,这样就可以使用异步方法了
在这里插入图片描述

3.创建发送邮件服务

EmailService:

public interface EmailService {
    String sentSimpleMailMessage(String mailPath);
}

EmailServiceImpl:

@Service("emailService")
public class EmailServiceImpl implements EmailService{
    @Autowired
    JavaMailSenderImpl javaMailSender;
    @Value("${spring.mail.username}")
    private String sentMailPath;


    @Async //设置为异步方法
    //发送简单邮件
    public String sentSimpleMailMessage(String mailPath){
        //创建一个简单的邮件
        SimpleMailMessage message=new SimpleMailMessage();
        //设置发出邮件地址
        message.setFrom(sentMailPath);
        //设置接收邮件地址
        message.setTo(mailPath);
        //随机生成一个六位的验证码
        String code = RandomStringUtils.random(6, "0123456789");
        message.setText("您的验证码是:"+code);
        message.setSubject("验证码信息");
        javaMailSender.send(message);
        System.out.println("发送完成");
        return "发送完毕";
    }
    @Async //设置为异步方法
    //发送复杂邮件
    public String sent(String mailPath) throws MessagingException {
        //创建一个复杂的邮件
        MimeMessage mimemessage=javaMailSender.createMimeMessage();
        //创建 MimeMessageHelper,设置能够解析html
        MimeMessageHelper helper=new MimeMessageHelper(mimemessage,true);
        helper.setFrom(sentMailPath);
        helper.setTo(mailPath);
        //插入html语句
        helper.setText("<p style='color: red'>你好啊</p> ",true);
        //添加附件
        helper.addAttachment("art.jpg",new File("images/art.jpg"));
        javaMailSender.send(mimemessage);
        return "发送完毕";
    }
}
4.创建测试controller和页面

EmailController:

@Controller
public class EmailController {
    @Autowired
    private EmailService emailService;
    @RequestMapping("/")
    public String to(){
        return "test";
    }
    @ResponseBody
    @RequestMapping("/sent")
    public String sent(String mailPath){
        emailService.sentSimpleMailMessage(mailPath);
        System.out.println("已经发送");
        return "信息已发送,请稍等。";
    }
}

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/sent" method="post">
    请输入邮箱:<input type="text" name="mailPath"><br>
    <input type="submit" value="发送验证码">
</form>
</body>
</html>
5.测试:

输入要接收的邮件的地址,点击发送。
在这里插入图片描述
成功接收。
在这里插入图片描述
再看一下控制台输出:
在这里插入图片描述
这里EmailController的sent()方法,在sentSimpleMailMessage()方法输出“发送完成”之前,就输出了“已经发送”,说明是异步进行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值