SpringBoot-Mail工具實現(xiàn)郵箱驗證碼登錄注冊功能
前言

現(xiàn)在許多pc程序都有著使用郵箱驗證碼實現(xiàn)登錄注冊的功能,那么我們應(yīng)該如何完成郵箱驗證碼功能呢,我們可以使用springboot內(nèi)置的springboot-mail再結(jié)合redis來完成這個功能。
代碼實現(xiàn)
一、引入springboot-mail和redis依賴
<!--郵箱依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--redis依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>二、郵箱常量類
public class MailConstant {
/**
* 郵箱驗證redis前綴
*/
public static final String CODE_KEY_PREFIX = "mail:";
}三、郵箱工具類
@Slf4j
@Service
public class MailUtils {
@Resource
RedisTemplate<String, Integer> redisTemplate;
@Resource
private JavaMailSenderImpl mailSender;
public void sendMail(Mail mail) throws MailSendException {
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);
if (mail.getFrom() == null || mail.getFrom().isEmpty()) {
mail.setFrom("xxx");
}
//郵件發(fā)信人
messageHelper.setFrom(mailSender.getUsername() + '(' + mail.getFrom() + ')');
//郵件收信人
messageHelper.setTo(mail.getTo().split(","));
//郵件主題
messageHelper.setSubject(mail.getSubject());
//郵件內(nèi)容
messageHelper.setText(mail.getText());
//發(fā)送郵件
mailSender.send(messageHelper.getMimeMessage());
} catch (Exception e) {
log.warn("郵件發(fā)送失?。簕}", e.getMessage());
throw new MailSendException("郵件發(fā)送失敗:" + e.getMessage());
}
}
/**
* 發(fā)送驗證碼郵件
*
* @param mail 郵件信息
*/
public void sendVerificationCode(Mail mail) {
// 判斷當前待發(fā)送郵箱是否已經(jīng)有驗證碼
String key = CODE_KEY_PREFIX + mail.getTo();
Integer code = redisTemplate.opsForValue().get(key);
if (code != null) {
throw new UserException("當前郵箱已經(jīng)發(fā)送驗證碼");
}
// 生成隨機 6位驗證碼
int idenCode = (int) ((Math.random() * 9 + 1) * 100000);
mail.setSubject("xxx");
mail.setText("驗證碼:" + idenCode);
redisTemplate.opsForValue().set(key, idenCode, 60, TimeUnit.SECONDS);
sendMail(mail);
}
}四、代碼調(diào)用
4.1 發(fā)送郵箱
/**
* 發(fā)送郵箱驗證碼
*
* @param email 用戶郵箱
* @return 發(fā)送結(jié)果
*/
@PostMapping("send/code")
public Result<?> sendUserMail(String email) {
Mail mail = new Mail();
mail.setTo(email);
mailUtils.sendVerificationCode(mail);
return Result.ok(null, "發(fā)送成功");
}4.2 用戶注冊
@Override
public boolean userRegister(User user, Integer captcha) {
//判斷用戶是否已經(jīng)注冊
User exist = getOne(Wrappers.<User>lambdaQuery().eq(User::getMail, user.getMail()));
if(exist!=null){
throw new UserException("用戶已注冊");
}
// 判斷驗證碼是否相同
String key = CODE_KEY_PREFIX + user.getMail();
Integer authcode = (Integer) redisTemplate.opsForValue().get(key);
if (authcode == null) {
throw new UserException("驗證碼已過期,請重新發(fā)送");
}
if (!authcode.equals(captcha)) {
throw new UserException("驗證碼錯誤");
}
return userMapper.insert(user)>0;
}總結(jié)
以上就是springboot實現(xiàn)郵箱驗證碼登錄注冊的基本實現(xiàn),覺得有用的大家可以點點贊。
到此這篇關(guān)于SpringBoot-Mail工具的使用-實現(xiàn)郵箱驗證碼登錄注冊的文章就介紹到這了,更多相關(guān)SpringBoot郵箱驗證碼登錄注冊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot AOP實現(xiàn)釘釘+企業(yè)微信雙渠道異常告警
本文主要介紹了SpringBoot AOP實現(xiàn)釘釘+企業(yè)微信雙渠道異常告警,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
java算法之Math.random()隨機概率玩法實例演示
最近打算整理排序算法,發(fā)現(xiàn)很有必要準備一下生成隨機數(shù)的工具類,下面這篇文章主要給大家介紹了關(guān)于java算法之Math.random()隨機概率玩法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05
Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟詳解
這篇文章主要介紹了Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
java多線程并發(fā)executorservice(任務(wù)調(diào)度)類
這篇文章主要介紹了線程并發(fā)ScheduledExecutorService類,設(shè)置 ScheduledExecutorService ,2秒后,在 1 分鐘內(nèi)每 10 秒鐘蜂鳴一次2014-01-01
JAVA中string數(shù)據(jù)類型轉(zhuǎn)換詳解
在JAVA中string是final類,提供字符串不可以修改,string類型在項目中經(jīng)常使用,下面給大家介紹了string七種數(shù)據(jù)類型轉(zhuǎn)換,需要的朋友可以參考下2015-07-07

