Flyinsky's Codes
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集成邮件发送的简易流程。