Springboot整合Mail进行邮箱验证码注册

这篇具有很好参考价值的文章主要介绍了Springboot整合Mail进行邮箱验证码注册。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

二、application.yml配置

spring:
  mail:
    host: smtp.qq.com
    port: 465
    username: 你的qq邮箱
    password: 你的qq邮箱授权码
    protocol: smtps
    default-encoding: UTF-8 #默认编码格式
    properties:
      mail:
        debug: true #启动debug调试
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory #SSL连接配置

Spring Mail的配置信息,用于设置邮件发送相关参数。

  • host: SMTP服务器的地址,这里使用QQ邮箱的SMTP服务器地址。
  • port: SMTP服务器监听的端口,默认为25,但QQ邮箱SMTP服务器采用SSL加密传输需要使用465端口。
  • username: 发送邮件的邮箱账号,这里填写QQ邮箱的账号。
  • password: 发送邮件的邮箱账号的授权码,用于验证邮箱身份,这里也填写QQ邮箱的账号的授权码。
  • protocol: 使用协议类型,这里选择smtps,即SMTP-over-SSL。
  • default-encoding: 默认编码格式,这里设置为UTF-8。
  • debug: 是否启动调试模式,当设置为true时会打印出更多调试信息。
  • properties: 设定额外的属性,这里设置了mailsmtp两个属性,socketFactory则对应SSL连接所需的类。

三、EmailService代码解读

@Service
public class EmailService {

创建一个名为EmailService的服务类。

@Autowired
private JavaMailSender mailSender;

使用Spring的自动装配(Autowired)特性注入一个JavaMailSender实例作为依赖项。JavaMailSender是用于发送邮件的Spring框架中的接口。

@Value("${spring.mail.username}")
private String from;

使用注释值(Value)来从配置文件中读取属性值,这里指的是spring.mail.username的值并将其变量化成from

public void sendMail(String to, String subject, String content) throws MessagingException {

在服务类中定义名为sendMail的方法,该方法接收三个参数(tosubjectcontent)并且可以抛出MessagingException异常。

MimeMessage message = mailSender.createMimeMessage();

创建邮件消息对象message,使用注入的mailSender的实例方法createMimeMessage()来创建相应的MIME消息。

MimeMessageHelper helper = new MimeMessageHelper(message, true);

创建一个帮助程序对象helper并将上述邮件消息message与之关联。true表示需要支持附件,否则设为false。

helper.setFrom(from);

设置发件人信息,在此处由变量from表示。

helper.setTo(to);

设置收件人信息,该信息由传入的参数to表示。

helper.setSubject(subject);

设置邮件主题,该主题由传入的参数subject表示。

helper.setText(content, true);

设置邮件正文,并指示内容是否为HTML格式。内容是由传入的参数 content表示的。

mailSender.send(message);

发送邮件,使用注入的mailSender实例的方法send()来将构造好的message对象发送。

四、VerificationCodeUtils随机验证码代码解读

public class VerificationCodeUtils {

这一行声明一个公共类(public class)VerificationCodeUtils。

    public static String generateCode(int length) {

这一行是声明一个公共的静态方法(public static method),名称为generateCode,返回类型为字符串(String),其中有一个参数,名称为length,表示生成的验证码的长度。

        StringBuilder s = new StringBuilder();

这一行是声明一个空白的字符串构建器(StringBuilder),用于存储生成的验证码。

        Random random = new Random();

这一行是声明一个随机数生成器(Random),用来产生随机数字。

        for (int i = 0; i < length; i++) {
            int n = random.nextInt(10);
            s.append(n);
        }

这一段是循环生成随机数字,并将其添加到指定长度的字符串构建器中。

        return s.toString();
    }
}

五、controller层代码解读

@Autowired
private EmailService emailService;

这行代码使用Spring的依赖注入自动将EmailService类的实例注入到emailService变量中。

private final Map<String, String> emailCodeMap = new ConcurrentHashMap<>(16);

这行代码声明一个并发哈希映射对象,用于存储邮箱验证码的键值对信息。

@PostMapping("/register")
public ApiResponse<String> register(@RequestBody Mail mail) throws MessagingException {

这行代码通过PostMapping注解配置了一个基于HTTP POST方法的请求处理,当收到路径为“/register”的请求时,它会将请求体反序列化成Mail类型的mail参数。ApiResponse是响应结果的数据类型,其中ResponseCode.SUCCESS表示成功状态码,"验证码已发送"是结果消息的内容。

String code = VerificationCodeUtils.generateCode(6);

这行代码调用VerificationCodeUtils工具类的generateCode方法生成一个6位数字的随机验证码,并将其保存在code变量中。

String subject = "注册验证码";
String content = "尊敬的用户,您的验证码为:" + code;
emailService.sendMail(mail.email, subject, content);

这三行代码设置邮件主题和内容,然后使用调用EmailService的sendMail方法将邮件发送给指定的邮箱(mail.email),以及验证码的message。

emailCodeMap.put(mail.email, code);

这行代码将(邮箱,验证码)键值对信息放入emailCodeMap哈希映射中。

return new ApiResponse<>(ResponseCode.SUCCESS,"验证码已发送");

最后,这行代码返回ApiResponse对象,该对象包含了响应结果的状态码和消息内容。文章来源地址https://www.toymoban.com/news/detail-477722.html

六、整体代码

  @Autowired
    private EmailService emailService;

    // 存储已发送的验证码
    private final Map<String, String> emailCodeMap = new ConcurrentHashMap<>(16);

    @PostMapping("/register")
    public ApiResponse<String> register(@RequestBody Mail mail)  throws MessagingException {
        // 检查邮箱是否已被注册
        // ...

        // 生成验证码
        String code = VerificationCodeUtils.generateCode(6);

        // 发送邮件
        String subject = "注册验证码";
        String content = "尊敬的用户,您的验证码为:" + code;
        emailService.sendMail(mail.email, subject, content);

        // 保存验证码
        emailCodeMap.put(mail.email, code);

       return new ApiResponse<>(ResponseCode.SUCCESS,"验证码已发送");
    }

@Data
public class Mail {
    public String email;
    public String username;
    public String password;
}


@Service
public class EmailService {
    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;

    /**
     * 发送邮件
     *
     * @param to      收件人邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendMail(String to, String subject, String content) throws MessagingException {
        // 创建邮件消息
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);

        // 发送邮件
        mailSender.send(message);
    }
}

public class VerificationCodeUtils {
    /**
     * 生成随机验证码
     *
     * @param length 验证码长度
     * @return 验证码
     */
    public static String generateCode(int length) {
        StringBuilder s = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            int n = random.nextInt(10);
            s.append(n);
        }
        return s.toString();
    }
}

到了这里,关于Springboot整合Mail进行邮箱验证码注册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot mail使用QQ邮箱错误汇总

    目录 1、QQ邮箱的SMTP服务器端口与相关yml配置 2、错误汇总 1、javax.mail.MessagingException: Got bad greeting from SMTP host: smtp.qq.com, port: 465, response: [EOF] 2、javax.net.ssl.SSLException: Unsupported or unrecognized SSL message. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 25;

    2024年02月04日
    浏览(32)
  • Vue+NodeJS+MongoDB实现邮箱验证注册、登录

    邮件发送 用户注册 用户信息存储到数据库 用户登录 密码加密 JWT生成token Cookie实现快速登录 在用户注册时,先发送邮件得到验证码.后端将验证进行缓存比对,如果验证码到期,比对不正确,拒绝登录;如果比对正确,将用户的信息进行加密存储到数据库. 用户登录时,先通过用户名去

    2024年02月09日
    浏览(36)
  • SpringBoot整合邮箱发送邮件

    SpringBoot整合邮箱发送邮件 引入依赖 配置文件 Service层接口及实现类 邮件模板[templates/mail.html] 测试启动类及自测用例 自测效果截图

    2024年02月07日
    浏览(53)
  • 引入QQ邮箱发送验证码进行安全校验

    其他方案=引入短信服务发送手机验证码进行安全校验 操作相对复杂且收费,详细教程可供参考选择 在我们进行登录注册等等敏感操作时,为了保证用户信息的安全性,常常会碰到需要接收手机短信验证码进行验证的场景,虽然它的安全系数相对较高,但是引入手机验证码使

    2024年02月04日
    浏览(31)
  • JavaWeb登录注册系统/界面(邮箱验证码,数据库连接,详细注释,可作结课作业,可用于学习,可接入其他主系统)

    目录 1、致谢 2、前言 3、系统实机演示 4、系统分析与设计 (1)主要软件与工具 (2)系统分析 (3)系统规划 5、系统设计与构建 (1)JavaWeb创建 (2)JavaWeb运行 (3)先期依赖准备: 6、代码与关键注释、文件简析 (1)数据库 (2)前端 index.jsp和styleIndex.css: forgetPassword

    2024年02月08日
    浏览(41)
  • jenkins邮箱设置报:501 mail from address must be same as authorization user

    jenkins配置邮箱时遇到如下错误:501 mail from address must be same as authorization user 原因是管理员邮箱地址与发送邮箱地址不统一,配置管理员邮件地址:系统管理-系统配置-Jenkins Location,输入与发件人统一的地址即可

    2024年02月11日
    浏览(31)
  • Springboot整合JWT完成验证登录

    这个Java类是一个工具类,用于生成和验证JSON Web Tokens(JWT)。JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。这个信息可以被验证和信任,因为它是数字签名的。在这个例子中,使用了Java的jsonwebtoken库。 下面

    2024年02月09日
    浏览(34)
  • 【SpringBoot】1、SpringBoot整合JWT实现Token验证

    单点登录(Single Sign On), 简称为 SSO , 是目前比较流行的企业业务整合的解决方案之一. SSO的定义:在多个应用系统中, 用户只需要登录一次就可以访问所有相互信任的应用系统, 企业间需要相互授信 众所皆知, HTTP是 无状态的协议 , 这意味着 服务器无法确认用户的信息。 于是乎,

    2024年02月03日
    浏览(49)
  • SpringBoot整合Kaptcha实现图形验证码

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 以下是专栏部分内容,更多内容请前往专栏查看! 标题 一文带你学会使用SpringBoot+Avue实现短信通知功能

    2024年02月08日
    浏览(44)
  • springboot整合eureka、config搭建注册中心和配置中心

    这篇文章详细介绍怎么通过eureka和config分别搭建一个注册中心和配置中心的服务。 目录 一 、springboot整合eureka搭建注册中心 二、springboot整合config搭建配置中心 三、从配置中心拉取配置 1、在IntelliJ IDEA中创建一个springboot项目,并命名为eureka 2、修改pom.xml,添加eureka-server的依

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包