1. 邮箱授权码获取
邮箱 --> 设置 --> POP3/SMTP/IMAP --> 开启服务(POP3/SMTP服务) --> 授权码
开启并获取后 将 授权码保存下来。
2. 项目 导入依赖
<!-- 邮箱 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
3. 配置文件
.yml格式
# Spring配置 spring: # redis 配置 redis: # 地址 host: (redis地址) # 端口,默认为6379 port: 6379 # 数据库索引 database: 0 # 密码 password: (redis连接密码) # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # 163 邮箱 mail: host: smtp.163.com(此处是我的163) port: 465 username: (邮箱账户) password: (授权码) properties: mail: smtp: auth: true starttls: enable: true required: true ssl: enable: true
.properties格式
# application.properties spring.mail.host=smtp.163.com spring.mail.port=587 spring.mail.username=(邮箱号) spring.mail.password=(授权码) spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true
注意:
- host:是SMTP服务器,不是IP地址;
- username:是邮箱号,不是用户名;
- password:是授权码,不是密码;
4. 代码实现
(1) EmailService 邮件服务类
/** * 邮箱邮件服务类 */ @Service public class EmailService { @Autowired private JavaMailSender mailSender; /** * 发送邮件信息 * @param toEmail 接收邮箱地址 * @param verificationCode 验证验证码 */ public void sendVerificationEmail(String toEmail, String verificationCode) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("[email protected]"); // 发件人发起地址 message.setTo(toEmail); // 收件人地址 message.setSubject("xxx系统:"); // 邮件主题 message.setText("您正在完善个人私密信息,验证码: " + verificationCode + ",请勿泄露邮箱密码。"); // 邮件正文(包含验证码) mailSender.send(message); // 发送 } }
(2) LoginController 接口类
import java.util.Map; /** * 登录 */ @RestController @RequestMapping("/user_login") public class LoginController { @Autowired private EmailService emailService; @Autowired private JxRedisCache redisCache; /** * 邮箱验证码发送 * @param request 以 userEmail为键获取值 * @return 成功 ? 失败 */ @PostMapping("/email_code") public AjaxResult sendEmailCode(@RequestBody Map<String, String> request) { String userEmail = request.get("userEmail"); String code = generateVerificationCode(); try { emailService.sendVerificationEmail(userEmail, code); // 验证码存储与redis redisCache.setCacheObject("email:" + userEmail, code); return AjaxResult.success("邮箱验证码发送成功"); }catch (Exception e){ return AjaxResult.error("邮箱验证码发送失败"); } } /** * 生成 6位数 验证码 */ private String generateVerificationCode() { // 实现生成验证码的逻辑,生成6位数字验证码 return String.valueOf((int)(Math.random() * 900000) + 100000); } }
(3) 测试
标签:SpringBoot,spring,redis,验证码,String,邮箱,mail,163 From: https://www.cnblogs.com/warmNest-llb/p/18206857