QQ邮箱发送验证码(springboot、redis整合)

QQ邮箱发送验证码(springboot、redis整合)目录 前置 1 开启 POP3 SMTP 服务 2 依赖导入 3 写业务 4 测试 前置 说明 实现邮箱发送信息 可以不用 redis 1 开启 POP3 SMTP 服务 里面会要求发送短信 并得到密码 这个验证码后面会用到 2 依赖导入

大家好,我是讯享网,很高兴认识大家。

目录

 

前置

1.开启POP3/SMTP服务

2.依赖导入

3.写业务

4.测试


前置

说明:实现邮箱发送信息,可以不用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 { @Bean public 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; } @Bean public 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..com # 端口 587和465都可以 msm.port=587 # 发送短信的密码 msm.password=上面的密码 spring.redis.host=hadoop102 spring.redis.port=6379 spring.redis.database= 0 spring.redis.timeout= spring.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; @Override public void afterPropertiesSet() throws Exception { this.EMAIL = email; this.HOST = host; this.PORT = port; this.PASSWORD = password; } }

serviceImpl实现方法

讯享网@Service public class MsmServiceImpl implements MsmService { @Override public 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 { @Autowired private MsmService msmService; @Autowired private 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获取数据

小讯
上一篇 2025-02-08 16:05
下一篇 2025-02-15 23:44

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/52083.html