Java集成郵箱驗證找回密碼功能全過程
1.添加依賴
<!--導(dǎo)入郵箱依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>3.1.5</version> </dependency>
2.選擇一個自己的郵箱,作為發(fā)件人角色。
說白了,用戶找回密碼時,需要發(fā)件人發(fā)送給用戶郵箱一個驗證碼,那么這個發(fā)件人郵箱,需要我們自己選取。
此時我就選擇用我自己的QQ郵箱,作為發(fā)件人。
下面就需要我們?nèi)Q郵箱,開啟POP3/SMTP服務(wù),獲取授權(quán)碼。
3.編寫郵箱配置【配置發(fā)件人郵箱】
我們在【2】中,選取了我們自己的QQ郵箱,充當(dāng)發(fā)件人角色。
那么我們此時,就需要將該QQ郵箱的配置信息(包含賬號、授權(quán)碼等等),配置到Java的application.yml文件中。
配置好以后,Java就可以在需要時,自動使用我們的QQ郵箱,給忘記密碼的用戶的郵箱發(fā)送驗證碼了。
4.編寫郵箱配置類
其實【3】就夠用了,但是有時候只完成3的配置,仍然無法注入JavaMailSender的實例。
@Configuration public class MailConfig { @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); // 設(shè)置QQ郵箱SMTP服務(wù)器 mailSender.setHost("smtp.qq.com"); mailSender.setPort(587); // QQ郵箱默認端口587(TLS)或465(SSL) // 設(shè)置郵箱賬號和授權(quán)碼(注意:password是授權(quán)碼,不是QQ密碼) mailSender.setUsername("發(fā)件郵箱賬號"); mailSender.setPassword("授權(quán)碼"); // 設(shè)置編碼 mailSender.setDefaultEncoding("UTF-8"); // 設(shè)置SMTP協(xié)議屬性 Properties props = mailSender.getJavaMailProperties(); props.put("mail.smtp.auth", "true"); // 啟用認證 props.put("mail.smtp.starttls.enable", "true"); // 啟用TLS加密 props.put("mail.smtp.starttls.required", "true"); // 必須使用TLS return mailSender; } }
5.編寫controller業(yè)務(wù)代碼
由于發(fā)送郵件內(nèi)容不多,所以我們就將所有代碼都寫到一個controller層即可,就不再創(chuàng)建service層了。
@RestController//表明這是一個controller層,并且自動將對象轉(zhuǎn)為JSON格式返回 @RequestMapping("/api/email")//該controller的訪問路徑 public class SendEmailController { @Autowired private JavaMailSender javaMailSender; @Autowired private UserMapper userMapper; //發(fā)送郵件 @PostMapping("/sendEmail") public Result sendEmail(@RequestBody EmailDto emailDto){ //1.先查找數(shù)據(jù)庫,是否存在該用戶的賬號,如果不存在,則返回錯誤信息“該賬號不存在” User user = userMapper.queryUserByUsername(emailDto.getUsername()); if(user == null){ return new Result(404, "該賬號不存在"); } //2.如果該賬號存在,則判斷該郵箱是否綁定了該賬號,如果沒綁定,則返回錯誤信息“賬號與郵箱未綁定” if(!user.getEmail().equals(emailDto.getEmail())){ return new Result(404, "賬號與郵箱未綁定"); } //3.如果綁定了,則往該用戶的郵箱中,發(fā)送一個驗證碼(多少位自己決定,一般是6位) //生成6位驗證碼 Random random = new Random(); int code = random.nextInt(900000) + 100000;//范圍:100000-999999(6位隨機數(shù)的范圍)。 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("發(fā)件人郵箱");//設(shè)置發(fā)件人郵箱 message.setTo(emailDto.getEmail());//設(shè)置收件人郵箱 message.setSubject("東軟HIS系統(tǒng)驗證碼");//郵件標題 message.setText("郵箱驗證碼為:" + code + ",請勿發(fā)送給他人");//郵件內(nèi)容 try { javaMailSender.send(message); //4.將該驗證碼存入redis,有效時間設(shè)置為2分鐘,以便后續(xù)驗證該用戶在前端輸入的驗證碼是否正確。TODO return new Result(200, "發(fā)送成功"); }catch (Exception e){ throw new RuntimeException("發(fā)送郵箱驗證碼失敗,請稍后再試"); } } }
6.演示效果
情況1:賬號不存在
情況2:賬號與郵箱未綁定
情況3:賬號與郵箱綁定。
可見此時我們的QQ小號的郵箱2037730735@qq.com也確實收到了這個郵箱驗證碼。
7.總結(jié)流程
①找一個自己的郵箱(QQ、163、outlook等都可以),作為發(fā)件人,并將該郵箱的信息配置到j(luò)ava后端
②收件人的郵箱,是從前端傳遞過來的(即:誰忘記了密碼,誰就輸入他自己的郵箱,作為驗證碼的收件人)。
③驗證碼發(fā)送成功后,應(yīng)當(dāng)存入redis,并設(shè)置有效時間(如:2分鐘),以便用戶在前端輸入驗證碼后,驗證正確性。
8.注意
上述發(fā)送郵箱驗證碼成功后,應(yīng)當(dāng)將驗證碼存入redis,我們此時還沒寫寫部分內(nèi)容,稍后會完善的。
到此這篇關(guān)于Java集成郵箱驗證找回密碼功能的文章就介紹到這了,更多相關(guān)Java集成郵箱驗證找回密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java+OpenCV調(diào)用攝像頭實現(xiàn)拍照功能
隨著我們對環(huán)境、Mat基本使用越來越熟練、Java Swing也逐步熟悉了起來。本文將通過OpenCV驅(qū)動攝像頭實現(xiàn)識臉和拍照功能,需要的可以參考一下2022-03-03Spring boot + mybatis + orcale實現(xiàn)步驟實例代碼講解
這篇文章主要介紹了Spring boot + mybatis + orcale的實現(xiàn)步驟實例代碼講解,需要的朋友可以參考下2017-12-12Spring?Boot?實現(xiàn)?WebSocket?的代碼示例
WebSocket?協(xié)議是獨立的基于?TCP?協(xié)議。它與?HTTP?的唯一關(guān)系是,它的握手會被?HTTP?服務(wù)器解釋為?Upgrade?請求,接下來通過本文給大家介紹Spring?Boot?實現(xiàn)?WebSocket?示例詳解,需要的朋友可以參考下2022-04-04利用Spring Validation實現(xiàn)輸入驗證功能
這篇文章主要給大家介紹了如何利用Spring Validation完美的實現(xiàn)輸入驗證功能,文中有詳細的代碼示例,具有一定的參考價值,感興趣的朋友可以借鑒一下2023-06-06Mybatis控制臺打印SQL語句的兩種方式實現(xiàn)
這篇文章主要介紹了Mybatis控制臺打印SQL語句的兩種方式實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03java實現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細介紹了java實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07mybatis-plus查詢無數(shù)據(jù)問題及解決
這篇文章主要介紹了mybatis-plus查詢無數(shù)據(jù)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12