Java集成郵箱驗(yàn)證找回密碼功能全過(guò)程
1.添加依賴(lài)
<!--導(dǎo)入郵箱依賴(lài)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>3.1.5</version>
</dependency>2.選擇一個(gè)自己的郵箱,作為發(fā)件人角色。
說(shuō)白了,用戶(hù)找回密碼時(shí),需要發(fā)件人發(fā)送給用戶(hù)郵箱一個(gè)驗(yàn)證碼,那么這個(gè)發(fā)件人郵箱,需要我們自己選取。
此時(shí)我就選擇用我自己的QQ郵箱,作為發(fā)件人。
下面就需要我們?nèi)Q郵箱,開(kāi)啟POP3/SMTP服務(wù),獲取授權(quán)碼。



3.編寫(xiě)郵箱配置【配置發(fā)件人郵箱】
我們?cè)凇?】中,選取了我們自己的QQ郵箱,充當(dāng)發(fā)件人角色。
那么我們此時(shí),就需要將該QQ郵箱的配置信息(包含賬號(hào)、授權(quán)碼等等),配置到Java的application.yml文件中。
配置好以后,Java就可以在需要時(shí),自動(dòng)使用我們的QQ郵箱,給忘記密碼的用戶(hù)的郵箱發(fā)送驗(yàn)證碼了。

4.編寫(xiě)郵箱配置類(lèi)
其實(shí)【3】就夠用了,但是有時(shí)候只完成3的配置,仍然無(wú)法注入JavaMailSender的實(shí)例。
@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郵箱默認(rèn)端口587(TLS)或465(SSL)
// 設(shè)置郵箱賬號(hào)和授權(quán)碼(注意:password是授權(quán)碼,不是QQ密碼)
mailSender.setUsername("發(fā)件郵箱賬號(hào)");
mailSender.setPassword("授權(quán)碼");
// 設(shè)置編碼
mailSender.setDefaultEncoding("UTF-8");
// 設(shè)置SMTP協(xié)議屬性
Properties props = mailSender.getJavaMailProperties();
props.put("mail.smtp.auth", "true"); // 啟用認(rèn)證
props.put("mail.smtp.starttls.enable", "true"); // 啟用TLS加密
props.put("mail.smtp.starttls.required", "true"); // 必須使用TLS
return mailSender;
}
}5.編寫(xiě)controller業(yè)務(wù)代碼
由于發(fā)送郵件內(nèi)容不多,所以我們就將所有代碼都寫(xiě)到一個(gè)controller層即可,就不再創(chuàng)建service層了。
@RestController//表明這是一個(gè)controller層,并且自動(dòng)將對(duì)象轉(zhuǎn)為JSON格式返回
@RequestMapping("/api/email")//該controller的訪(fǎng)問(wèn)路徑
public class SendEmailController {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private UserMapper userMapper;
//發(fā)送郵件
@PostMapping("/sendEmail")
public Result sendEmail(@RequestBody EmailDto emailDto){
//1.先查找數(shù)據(jù)庫(kù),是否存在該用戶(hù)的賬號(hào),如果不存在,則返回錯(cuò)誤信息“該賬號(hào)不存在”
User user = userMapper.queryUserByUsername(emailDto.getUsername());
if(user == null){
return new Result(404, "該賬號(hào)不存在");
}
//2.如果該賬號(hào)存在,則判斷該郵箱是否綁定了該賬號(hào),如果沒(méi)綁定,則返回錯(cuò)誤信息“賬號(hào)與郵箱未綁定”
if(!user.getEmail().equals(emailDto.getEmail())){
return new Result(404, "賬號(hào)與郵箱未綁定");
}
//3.如果綁定了,則往該用戶(hù)的郵箱中,發(fā)送一個(gè)驗(yàn)證碼(多少位自己決定,一般是6位)
//生成6位驗(yàn)證碼
Random random = new Random();
int code = random.nextInt(900000) + 100000;//范圍:100000-999999(6位隨機(jī)數(shù)的范圍)。
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("發(fā)件人郵箱");//設(shè)置發(fā)件人郵箱
message.setTo(emailDto.getEmail());//設(shè)置收件人郵箱
message.setSubject("東軟HIS系統(tǒng)驗(yàn)證碼");//郵件標(biāo)題
message.setText("郵箱驗(yàn)證碼為:" + code + ",請(qǐng)勿發(fā)送給他人");//郵件內(nèi)容
try {
javaMailSender.send(message);
//4.將該驗(yàn)證碼存入redis,有效時(shí)間設(shè)置為2分鐘,以便后續(xù)驗(yàn)證該用戶(hù)在前端輸入的驗(yàn)證碼是否正確。TODO
return new Result(200, "發(fā)送成功");
}catch (Exception e){
throw new RuntimeException("發(fā)送郵箱驗(yàn)證碼失敗,請(qǐng)稍后再試");
}
}
}6.演示效果
情況1:賬號(hào)不存在

情況2:賬號(hào)與郵箱未綁定

情況3:賬號(hào)與郵箱綁定。


可見(jiàn)此時(shí)我們的QQ小號(hào)的郵箱2037730735@qq.com也確實(shí)收到了這個(gè)郵箱驗(yàn)證碼。
7.總結(jié)流程
①找一個(gè)自己的郵箱(QQ、163、outlook等都可以),作為發(fā)件人,并將該郵箱的信息配置到j(luò)ava后端
②收件人的郵箱,是從前端傳遞過(guò)來(lái)的(即:誰(shuí)忘記了密碼,誰(shuí)就輸入他自己的郵箱,作為驗(yàn)證碼的收件人)。
③驗(yàn)證碼發(fā)送成功后,應(yīng)當(dāng)存入redis,并設(shè)置有效時(shí)間(如:2分鐘),以便用戶(hù)在前端輸入驗(yàn)證碼后,驗(yàn)證正確性。
8.注意
上述發(fā)送郵箱驗(yàn)證碼成功后,應(yīng)當(dāng)將驗(yàn)證碼存入redis,我們此時(shí)還沒(méi)寫(xiě)寫(xiě)部分內(nèi)容,稍后會(huì)完善的。
到此這篇關(guān)于Java集成郵箱驗(yàn)證找回密碼功能的文章就介紹到這了,更多相關(guān)Java集成郵箱驗(yàn)證找回密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java+OpenCV調(diào)用攝像頭實(shí)現(xiàn)拍照功能
隨著我們對(duì)環(huán)境、Mat基本使用越來(lái)越熟練、Java Swing也逐步熟悉了起來(lái)。本文將通過(guò)OpenCV驅(qū)動(dòng)攝像頭實(shí)現(xiàn)識(shí)臉和拍照功能,需要的可以參考一下2022-03-03
Spring boot + mybatis + orcale實(shí)現(xiàn)步驟實(shí)例代碼講解
這篇文章主要介紹了Spring boot + mybatis + orcale的實(shí)現(xiàn)步驟實(shí)例代碼講解,需要的朋友可以參考下2017-12-12
Spring?Boot?實(shí)現(xiàn)?WebSocket?的代碼示例
WebSocket?協(xié)議是獨(dú)立的基于?TCP?協(xié)議。它與?HTTP?的唯一關(guān)系是,它的握手會(huì)被?HTTP?服務(wù)器解釋為?Upgrade?請(qǐng)求,接下來(lái)通過(guò)本文給大家介紹Spring?Boot?實(shí)現(xiàn)?WebSocket?示例詳解,需要的朋友可以參考下2022-04-04
利用Spring Validation實(shí)現(xiàn)輸入驗(yàn)證功能
這篇文章主要給大家介紹了如何利用Spring Validation完美的實(shí)現(xiàn)輸入驗(yàn)證功能,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的朋友可以借鑒一下2023-06-06
Java程序運(yùn)行之JDK,指令javac java解讀
這篇文章主要介紹了Java程序運(yùn)行之JDK,指令javac java,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Mybatis控制臺(tái)打印SQL語(yǔ)句的兩種方式實(shí)現(xiàn)
這篇文章主要介紹了Mybatis控制臺(tái)打印SQL語(yǔ)句的兩種方式實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
mybatis-plus查詢(xún)無(wú)數(shù)據(jù)問(wèn)題及解決
這篇文章主要介紹了mybatis-plus查詢(xún)無(wú)數(shù)據(jù)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12

