目录

前置

1.开启POP3/SMTP服务

2.依赖导入

3.写业务

4.测试


前置

说明:实现qq邮箱发送信息,可以不用redis

1.开启POP3/SMTP服务

里面会要求发送短信,并得到密码,这个验证码后面会用到

2.依赖导入

email依赖

<!--        发送邮箱--><dependency><groupId>commons-email</groupId><artifactId>commons-email</artifactId><version>1.1</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency>

redis依赖

        <!-- 整合redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--      spring2.X集成redis所需common-pool2--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.0</version></dependency>

3.写业务

redis配置类,用的时候直接粘贴

@Configuration//表示配置类
@EnableCaching//表示缓存注解
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setConnectionFactory(factory);//key序列化方式template.setKeySerializer(redisSerializer);//value序列化template.setValueSerializer(jackson2JsonRedisSerializer);//value hashmap序列化template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置序列化(解决乱码的问题),过期时间600秒RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;}}

application.properties配置

补充:SMTP协议:smtps(端口465)v.msa(端口587)端口465和587用于电子邮件客户端到电子邮件服务器通信

msm.email=自己邮箱
# host
msm.host=smtp.qq.com
# 端口 587和465都可以
msm.port=587
# 发送短信的密码
msm.password=上面的密码spring.redis.host=hadoop102
spring.redis.port=6379
spring.redis.database= 0
spring.redis.timeout=1800000spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0

创建一个右键的工具类获取参数

@Component
public class EmailUtils implements InitializingBean {@Value("${msm.email}")private String email;@Value("${msm.host}")private String host;@Value("${msm.port}")private String port;@Value("${msm.password}")private String password;public static String EMAIL;public static String HOST;public static String PORT;public static String PASSWORD;@Overridepublic void afterPropertiesSet() throws Exception {this.EMAIL = email;this.HOST = host;this.PORT = port;this.PASSWORD = password;}
}

serviceImpl实现方法

@Service
public class MsmServiceImpl implements MsmService {@Overridepublic Boolean send(Map<String, Object> param, String email) {if(StringUtils.isEmpty(email)) return false;try {SimpleEmail mail = new SimpleEmail();mail.setSslSmtpPort(EmailUtils.PORT);mail.setHostName(EmailUtils.HOST);// 设置密码验证器mail.setAuthentication(EmailUtils.EMAIL, EmailUtils.PASSWORD);// 设置邮件发送者mail.setFrom(EmailUtils.EMAIL);mail.addTo(email);// 设置邮件编码mail.setCharset("UTF-8");// 设置邮件主题mail.setSubject("浪浪课间");// 设置邮件内容mail.setMsg("10分钟内有效,您的验证码为:"+param.get("code"));// 设置邮件发送时间mail.setSentDate(new Date());// 发送邮件mail.send();return true;} catch (EmailException e) {throw new GuliException(20001,"邮件发送异常");}}

controller层

@RestController
@RequestMapping("/edumsm/msm")
@CrossOrigin
public class MsmController {@Autowiredprivate MsmService msmService;@Autowiredprivate RedisTemplate<String,String> redisTemplate;
//    发送短信方法@GetMapping("send/{email}")public R sendMsm(@PathVariable String email){
//        1.先从redis获取验证码,如果获取到直接返回String s = redisTemplate.opsForValue().get(email);if(!StringUtils.isEmpty(s)){return R.ok();}
//        如果redis获取不到,进行邮件的发送
//        生成随机数,传递到邮箱进行发送String code= RandomUtil.getFourBitRandom();Map<String,Object> param =new HashMap<>();param.put("code",code);
//        调用service里面短信调用的方法Boolean isSend=msmService.send(param,email);if(isSend){
//            发送成功,把发送成功的验证码再放到redis中
//            设置有效时间
//            设置5分钟redisTemplate.opsForValue().set(email,code,5, TimeUnit.MINUTES);return R.ok();}else {return R.error().message("邮箱发送失败");}}}

4.测试

打开swagger接口进行测试

结果:

邮件:

redis获取数据

QQ邮箱发送验证码(springboot、redis整合)相关推荐

  1. Spring Boot 整合163或者qq邮箱发送验证码

    前记 最近做的项目中注册功能要用到验证码,本来想用阿里云的短信服务,但是有点小贵,就另辟捷径,选择了用邮箱来发送验证码.记录一下整合过程,也希望能帮助一些有需要的人. 正文 1.Spring Boot ...

  2. SpringBoot通过qq邮箱发送验证码

    SpringBoot通过qq邮箱发送验证码 1.开启qq授权码 2.编写配置文件 spring:#邮箱验证mail:##163 smtp.163.com(反垃圾系统发送不了了)##qq smtp.qq ...

  3. 最简单Java实现QQ邮箱发送验证码

    Java使用QQ邮箱发送验证码 1. 开启服务,获取授权码 需登录自己的QQ邮箱,打开 POP3/SMTP 服务,并获取授权码. 具体操作: 登录邮箱 邮箱首页 "设置" 选择 & ...

  4. java发送qq邮箱验证_JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  5. react-hooks + node 使用qq邮箱发送验证码,验证修改密码

    在平常,我们写登录注册react项目时,我们可能会考虑使用QQ邮箱发送验证码登录注册,或者使用QQ邮箱验证来修改密码,下面,我们就来使用QQ邮箱来简单发送个邮件. 1.当我们想在react项目中使用Q ...

  6. Python使用QQ邮箱发送验证码

    向指定对象发送验证码 在做一些个人的demo或者实战项目等,涉及登录验证的,可以通过该方式实现一个简易的邮箱发送验证码. 该方法使用了Python的smtplib第三方库,需要保证发送者的QQ邮箱开通 ...

  7. java springboot借助qq邮箱发送验证码

    1.起因 主流的短信验证无论是阿里云还是腾讯云,都是需要收费的,且一般需要企业认证才可以使用.作为学习,我们可以选择无门槛的qq邮箱验证登录的方式. 2.步骤 2.1 访问qq邮箱官网qq邮箱,打开Q ...

  8. 引入QQ邮箱发送验证码进行安全校验

    其他方案=>引入短信服务发送手机验证码进行安全校验 操作相对复杂且收费,详细教程可供参考选择 最近想给自己的项目在注册时加点安全校验,本想着使用短信验证码,奈何囊中羞涩只能退而求次改用QQ邮箱验 ...

  9. nodejs+express实现用户登录或者注册通过邮箱发送验证码(redis验证)

    ❤️砥砺前行,不负余光,永远在路上❤️ ❤️砥砺前行,不负余光,永远在路上❤️ 简要目录 实现思路 一.后端部分(文件目录可以看图2) 1.redis部分 2.nodemailer部分 3.发送邮件的 ...

  10. QQ邮箱发送验证码功能的实现

    1.打开QQ邮箱的xxx服务,记住授权码 2.引入依赖 <dependency>             <groupId>org.springframework.boot&l ...

最新文章

  1. web api 限制单个IP在一定时间内访问次数
  2. matlab怎么输入输出文件,[转载]底层文件输入输出函数
  3. 分享一个针对触摸设备优化的图片幻灯jQuery插件 - touchtouch
  4. ubuntu 启用root 并使用ssh登陆
  5. 13SpringMvc_限定某个业务控制方法,只允许GET或POST请求方式访问
  6. oracle数据库link格式,Oracle创设DB Link
  7. Centos7下使用yum安装lnmp zabbix3.2
  8. java模拟滑动事件_java - 以编程方式在Android视图中触发滑动动作事件 - SO中文参考 - www.soinside.com...
  9. Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
  10. 动手学PaddlePaddle(4):MNIST(手写数字识别)
  11. 计算机设备的存放,哪一种设备不能用于长期保存计算机数据
  12. p3c插件 离线安装_阿里开发规范及P3C插件
  13. 使用ASP.NET Core开发Web API入门
  14. github gitee 仓库大小限制 单个文件大小限制
  15. R包的安装以及安装失败的解决
  16. 最通俗的解释下云计算,云计算的核心是什么?
  17. 微信小程序手机摇一摇功能
  18. 1.CDC绘图。包括加载图片,消去图片,设置图片一部分透明,不闪烁方式。
  19. 3 个简单的技巧让你的 vue.js 代码更优雅!
  20. 孤独和寂寞也是一种美

热门文章

  1. js之JSON格式用法和序列化JSON.stringify(value, replacer, space)以及反序列化JSON.parse(string)
  2. 基片集成波导天线设计基础
  3. python查缺补漏之decorate
  4. 饥荒联机版服务器控制台本地和在线,饥荒联机服务器常用控制台指令
  5. Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
  6. 优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)
  7. a5解锁 oppo_oppoa5忘记密码了怎么强制解锁
  8. 用计算机怎么算sin1.75,计算器sin30怎么按
  9. Adaptive Graph Convolutional Neural Networks
  10. Gradle学习笔记(二)