【SpringBoot】| 邮箱发送验证码,你会了吗?
今天咱们来聊一个在SpringBoot项目中Sending Blue的情节,相信小伙伴们在做项目时,都会遇到需要发送邮件的需求,比如用户注册、密码找回等。但是咱们平时常用的手机号验证码,都是需要花钱的,对吗?所以今天我要跟大家分享一个超级实用的替代方案——使用QQ邮箱发送验证码!这可是白嫖的,绝对的高性价比!
首先,咱们得在QQ邮箱里开启POP3/SMTP服务,这一步简单概括就是:登录邮箱,点设置,找到账户,然后开启动/pop3服务。记得保存授权码,这可是咱们后面登录的关键。然后呢,在项目里添加SpringBoot的邮件依赖,这个依赖可以让咱们轻松使用JavaMailSender接口。
接下来就是配置了,在application.yml里写上自己的邮箱和授权码,最后就是写一个发送邮件的工具类。整个流程下来,就可以用QQ邮箱给用户发送验证码啦!不仅免费,还方便,关键是接入简单,适合咱们这些开发小白。
最后给大家安利一个生成验证码的工具类,方便后面用来生成各种随机的验证码,随机的程度可以自己控制,这样就不怕用户看到重复的验证码了哈!好了,今天的分享就到这里,希望能帮到有需要的小伙伴们,下次再见哦!
目录
- 🦁 题外话
- 🦁 提前准备
-
- 2.1 配置邮箱第三方登录
-
- 2.1.1 点击设置——账户
- 2.1.2 开启POP3/SMTP服务
- 2.2 添加依赖
- 2.3 yaml配置
- 🦁 进入主题
- 🦁 测试使用
- 🦁 尾声
-
- 3.1 安利一个生成验证码的工具类
-
- 3.1.1 添加依赖
- 3.1.2 编写配置类
- 3.1.3 使用
- 3.1.4 演示结果
- 3.2 再见
🦁 题外话
日常生活中,咱们注册某一个平台或者找回密码甚至是登录到系统的时候,一般都需要注册手机号,经过手机号来接收验证码,然后完成这些需求。但是对于程序员来说,或许我们更加感兴趣的是如何来实现它,但是一般这种经过三大运营商的操作,都是需要付费的,所以咱们今天来讲一种它的平替——使用QQ邮箱来发送和接收验证码。qq邮箱是咱们日常使用到的既方便又免费的通讯工具之一(方便是因为日常使用微信,一般会和QQ邮箱关联)。现在咱们来介绍一下它在SpringBoot项目中的具体应用。
🦁 提前准备
2.1 配置邮箱第三方登录
在系统中使用到的邮箱发送邮件属于第三方登录,需要登录QQ邮箱配置第三方登录。
2.1.1 点击设置——账户
-
登录QQ邮箱,点击设置,跳转后找到账户。
2.1.2 开启POP3/SMTP服务
在账户那个页面,找到下面这一栏,点击开始就好啦。
然后会让你绑定邮箱的手机验证一下:
发送完信息,就会显示下面的授权码(一定要保存好,很重要),复制授权码备用。
2.2 添加依赖
回到项目,添加相关依赖,如下:
<!-- 发邮件 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
tips:
Spring提供了非常好用的JavaMailSender接口实现邮件发送。由于SpringBoot的Starter模块也为此提供了自动化配置,所以在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入邮件发送对象。
2.3 yaml配置
在这里配置好自己的邮箱和授权码,当然这里是自定义的,后面需要使用@Value获取。
# 发送邮件配置
mail:# 发件人地址user: 23734xxxxxx@qq.com# 发件人授权码password: pfemtwstpvkdabcd
🦁 进入主题
完成前面的步骤后,我们正式写一个发送邮件的工具类(建议直接复制)。
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;/* 发邮件工具类*/
@Component
public final class MailUtils {@Value("${mail.user}")private String USER; // 发件人邮箱地址@Value("${mail.password}")private String PASSWORD; // 如果是qq邮箱可以使户端授权码/* 发送邮件* @param to 收件人邮箱* @param text 邮件正文* @param title 标题*/public boolean sendMail(String to, String text, String title){try {final Properties props = new Properties();props.put("mail.smtp.auth", "true");props