Java集成郵箱驗證找回密碼功能全過程
1.添加依賴
<!--導入郵箱依賴--> <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ā)件人。
下面就需要我們去QQ郵箱,開啟POP3/SMTP服務,獲取授權碼。
3.編寫郵箱配置【配置發(fā)件人郵箱】
我們在【2】中,選取了我們自己的QQ郵箱,充當發(fā)件人角色。
那么我們此時,就需要將該QQ郵箱的配置信息(包含賬號、授權碼等等),配置到Java的application.yml文件中。
配置好以后,Java就可以在需要時,自動使用我們的QQ郵箱,給忘記密碼的用戶的郵箱發(fā)送驗證碼了。
4.編寫郵箱配置類
其實【3】就夠用了,但是有時候只完成3的配置,仍然無法注入JavaMailSender的實例。
@Configuration public class MailConfig { @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); // 設置QQ郵箱SMTP服務器 mailSender.setHost("smtp.qq.com"); mailSender.setPort(587); // QQ郵箱默認端口587(TLS)或465(SSL) // 設置郵箱賬號和授權碼(注意:password是授權碼,不是QQ密碼) mailSender.setUsername("發(fā)件郵箱賬號"); mailSender.setPassword("授權碼"); // 設置編碼 mailSender.setDefaultEncoding("UTF-8"); // 設置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è)務代碼
由于發(fā)送郵件內容不多,所以我們就將所有代碼都寫到一個controller層即可,就不再創(chuàng)建service層了。
@RestController//表明這是一個controller層,并且自動將對象轉為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.先查找數據庫,是否存在該用戶的賬號,如果不存在,則返回錯誤信息“該賬號不存在” 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位隨機數的范圍)。 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("發(fā)件人郵箱");//設置發(fā)件人郵箱 message.setTo(emailDto.getEmail());//設置收件人郵箱 message.setSubject("東軟HIS系統(tǒng)驗證碼");//郵件標題 message.setText("郵箱驗證碼為:" + code + ",請勿發(fā)送給他人");//郵件內容 try { javaMailSender.send(message); //4.將該驗證碼存入redis,有效時間設置為2分鐘,以便后續(xù)驗證該用戶在前端輸入的驗證碼是否正確。TODO return new Result(200, "發(fā)送成功"); }catch (Exception e){ throw new RuntimeException("發(fā)送郵箱驗證碼失敗,請稍后再試"); } } }
6.演示效果
情況1:賬號不存在
情況2:賬號與郵箱未綁定
情況3:賬號與郵箱綁定。
可見此時我們的QQ小號的郵箱2037730735@qq.com也確實收到了這個郵箱驗證碼。
7.總結流程
①找一個自己的郵箱(QQ、163、outlook等都可以),作為發(fā)件人,并將該郵箱的信息配置到java后端
②收件人的郵箱,是從前端傳遞過來的(即:誰忘記了密碼,誰就輸入他自己的郵箱,作為驗證碼的收件人)。
③驗證碼發(fā)送成功后,應當存入redis,并設置有效時間(如:2分鐘),以便用戶在前端輸入驗證碼后,驗證正確性。
8.注意
上述發(fā)送郵箱驗證碼成功后,應當將驗證碼存入redis,我們此時還沒寫寫部分內容,稍后會完善的。
到此這篇關于Java集成郵箱驗證找回密碼功能的文章就介紹到這了,更多相關Java集成郵箱驗證找回密碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring boot + mybatis + orcale實現步驟實例代碼講解
這篇文章主要介紹了Spring boot + mybatis + orcale的實現步驟實例代碼講解,需要的朋友可以參考下2017-12-12Spring?Boot?實現?WebSocket?的代碼示例
WebSocket?協(xié)議是獨立的基于?TCP?協(xié)議。它與?HTTP?的唯一關系是,它的握手會被?HTTP?服務器解釋為?Upgrade?請求,接下來通過本文給大家介紹Spring?Boot?實現?WebSocket?示例詳解,需要的朋友可以參考下2022-04-04