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) { // 判斷當(dāng)前待發(fā)送郵箱是否已經(jīng)有驗證碼 String key = CODE_KEY_PREFIX + mail.getTo(); Integer code = redisTemplate.opsForValue().get(key); if (code != null) { throw new UserException("當(dāng)前郵箱已經(jīng)發(fā)送驗證碼"); } // 生成隨機(jī) 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)文章
Spring通過ApplicationContext主動獲取bean的方法講解
今天小編就為大家分享一篇關(guān)于Spring通過ApplicationContext主動獲取bean的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03java通過模擬post方式提交表單實現(xiàn)圖片上傳功能實例
這篇文章主要介紹了java通過模擬post方式提交表單實現(xiàn)圖片上傳功能實例,涉及Java針對表單的提交操作響應(yīng)及文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題
這篇文章主要介紹了使用spring boot開發(fā)時java對象和Json對象轉(zhuǎn)換的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03spring cloud consul使用ip注冊服務(wù)的方法示例
這篇文章主要介紹了spring cloud consul使用ip注冊服務(wù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03SSH框架網(wǎng)上商城項目第2戰(zhàn)之基本增刪查改、Service和Action的抽取
SSH框架網(wǎng)上商城項目第2戰(zhàn)之基本增刪查改、Service和Action的抽取,感興趣的小伙伴們可以參考一下2016-05-05