QQ邮箱发送验证码(springboot、redis整合)
目录
前置
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整合)相关推荐
- Spring Boot 整合163或者qq邮箱发送验证码
前记 最近做的项目中注册功能要用到验证码,本来想用阿里云的短信服务,但是有点小贵,就另辟捷径,选择了用邮箱来发送验证码.记录一下整合过程,也希望能帮助一些有需要的人. 正文 1.Spring Boot ...
- SpringBoot通过qq邮箱发送验证码
SpringBoot通过qq邮箱发送验证码 1.开启qq授权码 2.编写配置文件 spring:#邮箱验证mail:##163 smtp.163.com(反垃圾系统发送不了了)##qq smtp.qq ...
- 最简单Java实现QQ邮箱发送验证码
Java使用QQ邮箱发送验证码 1. 开启服务,获取授权码 需登录自己的QQ邮箱,打开 POP3/SMTP 服务,并获取授权码. 具体操作: 登录邮箱 邮箱首页 "设置" 选择 & ...
- java发送qq邮箱验证_JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)
JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...
- react-hooks + node 使用qq邮箱发送验证码,验证修改密码
在平常,我们写登录注册react项目时,我们可能会考虑使用QQ邮箱发送验证码登录注册,或者使用QQ邮箱验证来修改密码,下面,我们就来使用QQ邮箱来简单发送个邮件. 1.当我们想在react项目中使用Q ...
- Python使用QQ邮箱发送验证码
向指定对象发送验证码 在做一些个人的demo或者实战项目等,涉及登录验证的,可以通过该方式实现一个简易的邮箱发送验证码. 该方法使用了Python的smtplib第三方库,需要保证发送者的QQ邮箱开通 ...
- java springboot借助qq邮箱发送验证码
1.起因 主流的短信验证无论是阿里云还是腾讯云,都是需要收费的,且一般需要企业认证才可以使用.作为学习,我们可以选择无门槛的qq邮箱验证登录的方式. 2.步骤 2.1 访问qq邮箱官网qq邮箱,打开Q ...
- 引入QQ邮箱发送验证码进行安全校验
其他方案=>引入短信服务发送手机验证码进行安全校验 操作相对复杂且收费,详细教程可供参考选择 最近想给自己的项目在注册时加点安全校验,本想着使用短信验证码,奈何囊中羞涩只能退而求次改用QQ邮箱验 ...
- nodejs+express实现用户登录或者注册通过邮箱发送验证码(redis验证)
❤️砥砺前行,不负余光,永远在路上❤️ ❤️砥砺前行,不负余光,永远在路上❤️ 简要目录 实现思路 一.后端部分(文件目录可以看图2) 1.redis部分 2.nodemailer部分 3.发送邮件的 ...
- QQ邮箱发送验证码功能的实现
1.打开QQ邮箱的xxx服务,记住授权码 2.引入依赖 <dependency> <groupId>org.springframework.boot&l ...
最新文章
- web api 限制单个IP在一定时间内访问次数
- matlab怎么输入输出文件,[转载]底层文件输入输出函数
- 分享一个针对触摸设备优化的图片幻灯jQuery插件 - touchtouch
- ubuntu 启用root 并使用ssh登陆
- 13SpringMvc_限定某个业务控制方法,只允许GET或POST请求方式访问
- oracle数据库link格式,Oracle创设DB Link
- Centos7下使用yum安装lnmp zabbix3.2
- java模拟滑动事件_java - 以编程方式在Android视图中触发滑动动作事件 - SO中文参考 - www.soinside.com...
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
- 动手学PaddlePaddle(4):MNIST(手写数字识别)
- 计算机设备的存放,哪一种设备不能用于长期保存计算机数据
- p3c插件 离线安装_阿里开发规范及P3C插件
- 使用ASP.NET Core开发Web API入门
- github gitee 仓库大小限制 单个文件大小限制
- R包的安装以及安装失败的解决
- 最通俗的解释下云计算,云计算的核心是什么?
- 微信小程序手机摇一摇功能
- 1.CDC绘图。包括加载图片,消去图片,设置图片一部分透明,不闪烁方式。
- 3 个简单的技巧让你的 vue.js 代码更优雅!
- 孤独和寂寞也是一种美
热门文章
- js之JSON格式用法和序列化JSON.stringify(value, replacer, space)以及反序列化JSON.parse(string)
- 基片集成波导天线设计基础
- python查缺补漏之decorate
- 饥荒联机版服务器控制台本地和在线,饥荒联机服务器常用控制台指令
- Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
- 优化概率神经网络_贝叶斯神经网络BNN(推导+代码实现)
- a5解锁 oppo_oppoa5忘记密码了怎么强制解锁
- 用计算机怎么算sin1.75,计算器sin30怎么按
- Adaptive Graph Convolutional Neural Networks
- Gradle学习笔记(二)