基于SpringBoot实现邮箱验证码功能

0. 准备工作

 

 基于SpringBoot实现邮箱验证码功能_第1张图片

 

1. 导入对应的坐标



    org.springframework.boot
    spring-boot-starter-mail

2. 创建一个邮件内容的实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmailDto {
    /**
     * 发送邮箱列表
     */
    @NotEmpty
    private String to;

    /**
     * 主题
     */
    @NotBlank
    private String subject;

    /**
     * 内容
     */
    @NotBlank
    private String content;

}

3. 设计发送邮件的服务类

这里只展示实现类

3.1 ymal文件设计

spring: 
 mail:
    host: smtp.qq.com
    username: [email protected]   # 收件人(我这里写死了,这个可以根据业务场景灵活变换)
    password: qkmhrhamgtjyebaa    # 这个不是你账号的密码,而是QQ邮箱pop/stmp的授权码
    default-encoding: UTF-8
    port: 465
    protocol: smtps    # 这个必须特殊声明为smtp,不然会报异常

3.2 发送纯文本内容的邮件

@Service
@Slf4j
public class EmailServiceImpl{
    @Autowired
    private JavaMailSender mailSender;

    @Override
    public void sendSimpleEmail(EmailDto emailDto) { //在emailDto类中封装验证码信息
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);//设置发件人
        message.setTo(emailDto.getTo());//设置收件人
        message.setSubject(emailDto.getSubject());//设置邮件的主题(标题)
        message.setText(emailDto.getContent());//设置邮件的内容

        try {
            mailSender.send(message);
            log.info("简单邮件已经发送。");
        } catch (Exception e) {
            log.info("简单邮件发送失败",e);
        }
    }
}

这里说明一点:

        JavaMailSender这个类是发送邮件的功能类由它来实现发送邮件的操作

        SimpleMailMessage这个类是构建了邮件的内容,比如收件人标题啥的

 效果图如下:

基于SpringBoot实现邮箱验证码功能_第2张图片

 

 3.3 发送html格式的邮件

3.3.1 引入对应的pom坐标



    org.springframework.boot
    spring-boot-starter-thymeleaf

3.3.2 邮件模板




    
    邮箱验证码
    


尊敬的用户:您好! 您正在进行注册账号操作,请在验证码中输入以下验证码完成操作:
注意:此操作可能会修改您的密码、登录邮箱或绑定手机。如非本人操作,请及时登录并修改密码以保证帐户安全
(工作人员不会向你索取此验证码,请勿泄漏!)

此为系统邮件,请勿回复
请保管好您的邮箱,避免账号被他人盗用

——xxx平台

 3.3.3 设计实现类

@Override
    public void sendHtmlEmail(EmailDto emailDto) throws MessagingException {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("xxx验证码"); // 邮件的标题
        helper.setFrom("[email protected]"); // 发送者
        helper.setTo("[email protected]");    // 接受者
        helper.setSentDate(new Date()); //时间

        // 这里引入的是Template的Context
        Context context = new Context();
        //设置模板中的变量
        context.setVariable("verifyCode", Arrays.asList("1234".split("")));
        // 第一个参数为模板的名称
        String process = templateEngine.process("email.html", context); //这里不用写全路径
        // 第二个参数true表示这是一个html文本
        helper.setText(process,true);
        mailSender.send(mimeMessage);

    }

注意的几个点:

        1. templateEngine.process()这里不要写全路径名,不然会找不到文件

        2. html文件注意头部分,不然可能参数无法替换

效果图如下:

 基于SpringBoot实现邮箱验证码功能_第3张图片

 字符串可以随意替换

相关api的用法可以参考:JavaMail API的使用,一看就会的那种_独泪了无痕的博客-CSDN博客

你可能感兴趣的:(spring,boot,java,后端)