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

springboot整合redis實(shí)現(xiàn)發(fā)送郵箱并驗(yàn)證

 更新時(shí)間:2022年01月02日 10:52:42   作者:馬牛B  
大家好,本篇文章主要講的是springboot整合redis實(shí)現(xiàn)發(fā)送郵箱并驗(yàn)證,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

1.起步

pom文件

  <!--集成redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.4.1.RELEASE</version>
        </dependency>
        <!--郵箱-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

下面是yml配置

#設(shè)置端口號
server:
  port: 8080
#配置數(shù)據(jù)源
spring:
  mail:
    #QQ郵箱這不用改
    host: smtp.qq.com
    #你的郵箱
    username: XX@qq.com
    #你的授權(quán)碼
    password: XXXXXX
    default-encoding: UTF-8
  redis:
    #redis服務(wù)器地址
    host: XXXXXX
    #Redis服務(wù)器連接端口
    port: 6379
    #Redis服務(wù)器連接密碼(默認(rèn)為空)
    password: XXX
    jedis:
      pool:
        #連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
        max-wait: 1000
        #連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
        max-active: 100
        #連接池中的最大空閑連接
        max-idle: 20
        #連接池中的最小空閑連接
        min-idle: 0
        #連接超時(shí)時(shí)間(毫秒)
    timeout: 30000
郵箱授權(quán)碼不知道的話QQ郵箱開通一下

在這里插入圖片描述

2.工具類

郵箱工具類

package com.example.demo.util;

/**
 * @Classname MailServiceUtils
 * @Description TODO
 * @Author 86176
 * @Date 2021-12-17 15:04
 * @Version 1.0
 **/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
@Component
public class MailServiceUtils{
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Autowired
    private JavaMailSender mailSender;
    /**
     * @param from 發(fā)送人
     * @param to 接收人
     * @param subject 主題
     * @param content 內(nèi)容
     */
    public void sendMail(String from,String to, String subject, String content){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        try {
            mailSender.send(message); logger.info("郵件成功發(fā)送!");
        } catch (MailException e) {
            logger.error("發(fā)送郵件錯(cuò)誤:",e);
        }
    }
}

redis亂碼解決

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @Classname Redisconfig
 * @Description TODO
 * @Author 86176
 * @Date 2021-12-06 10:02
 * @Version 1.0
 **/
@Configuration
public class Redisconfig {


    @Bean(name="redisTemplate")
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(redisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(redisSerializer);
        //key haspmap序列化
        template.setHashKeySerializer(redisSerializer);
        //
        return template;
    }
}

3.controller搭建

按要求更改

package com.example.demo.controller;

import com.example.demo.util.MailServiceUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @Classname EmailController
 * @Description TODO  郵箱發(fā)送
 * @Author 86176
 * @Date 2021-12-17 15:28
 * @Version 1.0
 **/
@Controller
public class EmailController {

    @Resource
    private MailServiceUtils mailServiceUtils;

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 發(fā)送驗(yàn)證碼 redis存儲驗(yàn)證碼
     * @param to 被發(fā)送的郵箱賬號
     * @return
     */
    @PostMapping("/fasong")
    @ResponseBody
    public String email(String to) {
        try {
            //生成6位隨機(jī)數(shù)
            String i = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
            //發(fā)送郵箱
            mailServiceUtils.sendMail("XXXXXX@qq.com", to, "驗(yàn)證碼", i);
            //redis保存驗(yàn)證碼
            redisTemplate.opsForValue().set(to, i);
        } catch (Exception e) {
            return "報(bào)錯(cuò)";
        }
        return "OK";
    }

    /**
     * 郵箱驗(yàn)證
     * @param to 被發(fā)送的郵箱賬號
     * @param yzm 輸入的驗(yàn)證碼判斷
     * @return
     */
    @PostMapping("/yz")
    @ResponseBody
    public String yz(String to, String yzm) {
        //根據(jù)郵箱帳號取出驗(yàn)證碼
        String o = (String) redisTemplate.opsForValue().get(to);
        if (o.equals(yzm)){
            return "OK";
        }
        return "No";
    }

    @RequestMapping("/abc")
    public String abc() {
        return "QQemail";
    }
}

4.前端搭建

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
     <div>
         接收方郵箱號 <input type="text" id="to">
         <input type="button" value="發(fā)送驗(yàn)證碼" id="yzm">
         驗(yàn)證碼<input type="text" id="yz">
         <input type="submit" value="驗(yàn)證" id="y">
     </div>
<script type="text/javascript"  src="../static/jquery-1.8.3.js"></script>
<script>
    /**
     * 發(fā)送驗(yàn)證碼
     */
    $("#yzm").click(function() {
        $.ajax({
            url : "/fasong",
            type : "post",
            data : {
                "to":$("#to").val()
            },
            success : function(data) {
                alert(data)
            }
        })
    })
    /**
     * 驗(yàn)證碼判斷
     */
    $("#y").click(function() {
        $.ajax({
            url: "/yz",
            type: "post",
            data: {
                "to": $("#to").val(),
                "yzm": $("#yz").val()
            },
            success: function (data) {
                alert(data)
            }
        })
    })
</script>
</body>
</html>

結(jié)果

redis和郵箱

頁面

總結(jié)

到此這篇關(guān)于springboot整合redis實(shí)現(xiàn)發(fā)送郵箱并驗(yàn)證的文章就介紹到這了,更多相關(guān)springboot redis發(fā)送郵箱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 多線程交通信號燈模擬過程詳解

    java 多線程交通信號燈模擬過程詳解

    這篇文章主要介紹了java 多線程交通信號燈模擬過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • springboot結(jié)合mysql主從來實(shí)現(xiàn)讀寫分離的方法示例

    springboot結(jié)合mysql主從來實(shí)現(xiàn)讀寫分離的方法示例

    這篇文章主要介紹了springboot結(jié)合mysql主從來實(shí)現(xiàn)讀寫分離的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java求s=a+aa+aaa+aaaa+aa...a 5個(gè)數(shù)相加的值

    Java求s=a+aa+aaa+aaaa+aa...a 5個(gè)數(shù)相加的值

    求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個(gè)數(shù)字。例如2+22+222+2222+22222(此時(shí)共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤控制
    2017-02-02
  • SpringBoot熱部署啟動(dòng)關(guān)閉流程詳解

    SpringBoot熱部署啟動(dòng)關(guān)閉流程詳解

    Spring?Boot啟動(dòng)熱部署是一種技術(shù),它能讓開發(fā)者在不重啟應(yīng)用程序的情況下實(shí)時(shí)更新代碼。這樣可以提高開發(fā)效率,避免頻繁重啟應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • 淺析Java自定義注解的用法

    淺析Java自定義注解的用法

    注解為我們在代碼中添加信息提供一種形式化的方法,使我們可以在源碼、編譯時(shí)、運(yùn)行時(shí)非常方便的使用這些數(shù)據(jù)。本文主要為大家介紹了Java自定義注解的用法,希望對大家有所幫助
    2023-03-03
  • Idea 配置國內(nèi) Maven 源的圖文教程

    Idea 配置國內(nèi) Maven 源的圖文教程

    這篇文章主要介紹了Idea 配置國內(nèi) Maven 源的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Java如何獲取相對路徑文件

    Java如何獲取相對路徑文件

    這篇文章主要介紹了Java如何獲取相對路徑文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Maven項(xiàng)目繼承實(shí)現(xiàn)過程圖解

    Maven項(xiàng)目繼承實(shí)現(xiàn)過程圖解

    這篇文章主要介紹了Maven項(xiàng)目繼承實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 教你怎么用idea創(chuàng)建web項(xiàng)目

    教你怎么用idea創(chuàng)建web項(xiàng)目

    好多朋友在使用IDEA創(chuàng)建項(xiàng)目時(shí),總會碰到一些小問題.現(xiàn)在我們就演示一下使用IDEA創(chuàng)建web項(xiàng)目的完整步驟吧.文中有非常詳細(xì)的圖文示例哦,,需要的朋友可以參考下
    2021-05-05
  • Maven倉庫加載順序的實(shí)例解析

    Maven倉庫加載順序的實(shí)例解析

    Maven倉庫一般分為本地倉庫和遠(yuǎn)程倉庫。那么在實(shí)際開發(fā)中,在配置了多個(gè)倉庫的情況下,他們之間的加載訪問順序是怎么樣的呢,本文就詳細(xì)的來介紹一下
    2021-12-12

最新評論

洮南市| 综艺| 武乡县| 厦门市| 南和县| 城口县| 宁南县| 准格尔旗| 鄄城县| 云林县| 抚松县| 平邑县| 湾仔区| 西畴县| 元江| 三门县| 海宁市| 梨树县| 文成县| 梁河县| 鹤壁市| 济阳县| 昌黎县| 清水县| 泌阳县| 合作市| 惠州市| 房山区| 武冈市| 甘泉县| 池州市| 咸阳市| 赤城县| 乌拉特中旗| 遂川县| 夏河县| 广平县| 凤阳县| 开江县| 天柱县| 迁西县|