最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集成郵箱驗證找回密碼功能全過程

 更新時間:2025年04月25日 10:19:11   作者:雪碧聊技術(shù)  
這篇文章主要給大家介紹了關(guān)于Java集成郵箱驗證找回密碼功能的相關(guān)資料,通過演示效果驗證功能的正確性,并總結(jié)了整個流程,在實際應(yīng)用中還需要將驗證碼存入Redis并設(shè)置有效時間,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

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郵箱默認(rèn)端口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");          // 啟用認(rèn)證
        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)驗證碼");//郵件標(biāo)題
        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多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步

    Java多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步

    這篇文章主要介紹了Java多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Java1.7全網(wǎng)最深入HashMap源碼解析

    Java1.7全網(wǎng)最深入HashMap源碼解析

    HashMap 是一個散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。HashMap 實現(xiàn)了 Map 接口,根據(jù)鍵的 HashCode 值存儲數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為 nul
    2021-11-11
  • Spring Boot集成教程之異步調(diào)用Async

    Spring Boot集成教程之異步調(diào)用Async

    在項目中,當(dāng)訪問其他人的接口較慢或者做耗時任務(wù)時,不想程序一直卡在耗時任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線程來并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來一起看看吧。
    2018-03-03
  • Java中Scanner類與BufferReader類的不同點(非常詳細(xì))

    Java中Scanner類與BufferReader類的不同點(非常詳細(xì))

    這篇文章主要介紹了Java中Scanner類與BufferReader類的不同點(非常詳細(xì))的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • Bean?Searcher配合SpringBoot的使用詳解

    Bean?Searcher配合SpringBoot的使用詳解

    這篇文章主要介紹了Bean?Searcher配合SpringBoot的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Java AtomicInteger類使用方法實例講解

    Java AtomicInteger類使用方法實例講解

    這篇文章主要介紹了Java AtomicInteger類使用方法實例講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot日志級別與日志分組詳解

    SpringBoot日志級別與日志分組詳解

    文章介紹了日志級別(ALL至OFF)及其作用,說明SpringBoot默認(rèn)日志級別為INFO,可通過application.properties調(diào)整全局或特定類的日志級別,并展示了日志調(diào)試技巧和分組配置方法,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • SpringBoot3.3中實現(xiàn)多端口監(jiān)聽的示例代碼

    SpringBoot3.3中實現(xiàn)多端口監(jiān)聽的示例代碼

    在SpringBoot應(yīng)用中實現(xiàn)多端口監(jiān)聽,可以讓一個應(yīng)用處理不同類型的HTTP請求或暴露多個服務(wù)接口,本文詳細(xì)講解了通過配置application.yml文件和編寫自定義配置類的方法,實現(xiàn)了對多個端口的監(jiān)聽,感興趣的可以了解一下
    2024-11-11
  • spring結(jié)合hibernate示例詳解

    spring結(jié)合hibernate示例詳解

    這篇文章主要介紹了spring結(jié)合hibernate結(jié)合,需要的朋友可以參考下
    2017-09-09
  • Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀

    Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀

    這篇文章主要介紹了Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀,在Java早期版本中,synchronized 屬于 重量級鎖,效率低下,這是因為監(jiān)視器鎖(monitor)是依賴于底層的操作系統(tǒng)的Mutex Lock來實現(xiàn)的,Java 的線程是映射到操作系統(tǒng)的原生線程之上的,需要的朋友可以參考下
    2023-12-12

最新評論

崇仁县| 峨眉山市| 贵阳市| 桂平市| 北碚区| 平安县| 即墨市| 公安县| 遵义县| 来宾市| 米易县| 清新县| 牡丹江市| 黄石市| 蓝田县| 昌图县| 灌云县| 中阳县| 晋中市| 南充市| 札达县| 波密县| 滕州市| 融水| 沙坪坝区| 集安市| 襄城县| 高雄县| 札达县| 太仆寺旗| 大邑县| 蓝田县| 固阳县| 海盐县| 隆昌县| 白沙| 灌南县| 鄢陵县| 重庆市| 武穴市| 武平县|