514 字
3 分钟
集成Java Mail发送验证码
集成Java Mail发送验证码
:::tip
开发web app时经常会遇到给用户发送验证码或是小广告的应用场景,今天记录一下如何在Springboot中集成Java Mail(以Outlook示例)
:::
1.添加依赖
在pom.xml中的dependencies标签中添加以下子标签:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.配置文件
添加依赖信息后刷新maven,在application.yml中填写属性。
mail:
# 配置 SMTP 服务器地址
host: smtp.office365.com
# 发送者邮箱
username: xingongshuo@7jtghd.onmicrosoft.com #邮箱账号
password: password #邮箱密码
# 端口号465或587 不同邮箱服务商去官网查阅
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
properties:
from: xingongshuo@7jtghd.onmicrosoft.com
#发件人地址,一般与邮箱账号一致
3.使用
完成配置后即可在需要使用到的Service中直接使用,当然为了代码简洁性建议封装一个邮件服务。
public String sendValidateEmail(String email, String sessionId) {
String key = "email:" + sessionId + ":" + email;
if (Boolean.TRUE.equals(template.hasKey(key))) {
//if判断条件为myredis数据库中是否已存在 可忽略
return "验证码发送频繁,请稍后重试";
}
if (userMapper.findUserByNameOrMail(email) != null) {
return "邮箱已被注册";
}
//从数据库中查询用户名或邮箱是否被占用
Random random = new Random();
int code = random.nextInt(899999) + 100000;
//随机函数生成六位验证码
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper;
Properties properties = mailSender.getJavaMailProperties();
//创建邮件类
properties.put("mail.smtp.starttls.enable", "true");
//微软邮箱要求使用starttls保证安全性
try {
helper = new MimeMessageHelper(message, true);
helper.setFrom("xingongshuo@7jtghd.onmicrosoft.com", "AIIT|智能之翼实验室");
//设置发件人地址和发件人名称
helper.setTo(email);
helper.setSubject("[AIIT|智能之翼实验室]您的验证码");
//设置邮件标题
helper.setText("欢迎来到智能之翼实验室,您的注册验证码是:" + code);
//设置邮件正文
mailSender.send(message);
//发送邮件
template.opsForValue().set(key, Integer.toString(code), 3, TimeUnit.MINUTES);
//向redis数据库中插入刚才发送的验证码,存活时间为3分钟
return null;
} catch (MessagingException e) {
e.printStackTrace();
return e.getMessage();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
以上便是Springboot集成邮件发送的简易流程。