赞
踩
目录
1、登录邮箱(以qq邮箱为例),点击邮箱右上角邮箱-设置-常规-第三方服务,会有如下选项
2、点击生成授权码(这边已经开启IMAP/SMTP服务,未开启的要先设置为开启),之后根据指示可以拿到一串由邮箱服务器提供的专属于自己的授权码,用于在Java代码中连接邮箱
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
- <!-- 邮箱验证码依赖 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mail</artifactId>
- </dependency>
-
- <!-- 一个很强大的工具库 -->
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>5.8.19</version>
- </dependency>
- redis:
- host: localhost
- port: 6379
-
- mail:
- host: smtp.qq.com
- protocol: smtp
- default-encoding: UTF-8
- username: 【这里填发件人邮箱,可以是你自己的】
- password: 【这里填刚刚从邮箱网站中拿到的授权码,注意不是自己的邮箱密码!!】
-
-
-
- nickname: 【发件人自命名】
- properties:
- mail.smtp.auth: true #启用SMTP服务器的身份验证,这是为了确保只有合法用户可以发送邮件。
- mail.smtp.starttls.enable: #启用TLS加密,这是为了确保邮件传输的安全性。
- mail.smtp.starttls.required: true #要求使用TLS加密,如果连接不是通过TLS加密传输,则连接将失败。
这里以windows作为举例:
- import cn.hutool.core.util.RandomUtil;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.mail.SimpleMailMessage;
- import org.springframework.mail.javamail.JavaMailSender;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
-
- import java.util.concurrent.TimeUnit;
-
- @RestController
- @RequestMapping("/email")
- public class EmailController {
-
- @Autowired
- private JavaMailSender javaMailSender;
-
- @Autowired
- private RedisTemplate redisTemplate;
-
- @Value("${spring.mail.username}")
- private String sender;
-
- @Value("${spring.mail.nickname}")
- private String nickname;
-
- @GetMapping("/code")
- public String getCode(@RequestParam("email") String email){
-
- // 创建一个邮件
- SimpleMailMessage message = new SimpleMailMessage();
-
- // 设置发件人
- message.setFrom(nickname+'<'+sender+'>');
-
- // 设置收件人
- message.setTo(email);
-
- // 设置邮件主题
- message.setSubject("欢迎访问"+nickname);
-
- //生成六位随机数
- String code = RandomUtil.randomNumbers(6);
-
- //将验证码存入redis,有效期为5分钟
- redisTemplate.opsForValue().set("email_code_"+email, code, 300000, TimeUnit.MILLISECONDS);
-
- String content = "【验证码】您的验证码为:" + code + " 。 验证码五分钟内有效,逾期作废。\n\n\n" +
- "------------------------------\n\n\n" ;
-
- message.setText(content);
-
- // 发送邮件
- javaMailSender.send(message);
-
- return "发送成功";
-
-
- }
-
- }
- @RestController
- @RequestMapping("/user")
- public class UserController {
-
-
-
- @Resource
- private RedisTemplate redisTemplate;
-
-
- // 通过邮箱验证登录
- @PostMapping("/loginByEmail")
- public ResponseBean loginByEmail(@RequestParam(value = "code") String code) {
-
- String email = "【这里写你已经收到验证码的邮箱】";
-
- String emailKey = "email_code_"+email;
-
- String storedToken = (String) redisTemplate.opsForValue().get(emailKey);
-
- if(code.equals(storedToken)){
-
- return ResponseBean.success("验证成功",null);
- }else {
-
- return ResponseBean.error("验证失败");
- }
-
- }
-
- }
成功接收到来自发送方的验证码
再进行邮箱登录测试
检查Redis服务器存储情况:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。