java mail
** 实现邮箱登录,注册,找回密码等功能,对此进行总结 **
** 这里的没有对数据库存储,而是使用redis进行存储,关于redis会在下节课总结**
引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
使用
我习惯于将Email发送封装在utils中,读者可以对应的进行修改
先配置yml的mail格式
mail:
# protocol: smtps 网易163 为 smtps qq为smtp
protocol: smtps
# 配置 SMTP 服务器地址
host: smtp.163.com
# 发送者邮箱
# username:
username: zzac0420@163.com
# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
password: BXWPKCLJQILSAGPJ
# 端口号465或587
# port: 465
port: 465
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
首先是controller层
package com.kob.backend.controller.Utils;
import java.util.Map;
@RestController
@AllArgsConstructor
@RequestMapping("/api/utils")
public class UtilsController {
private final UtilsService utilsService;
@GetMapping("email")
public Map<String,String> sendEmail(@RequestParam Map<String,String> map){
String email = map.get("email");
return utilsService.sendEmail(email);
}
}
这里传入的是收件人的邮箱地址
其次是service层
package com.kob.backend.service.impl.utils
import java.util.concurrent.ThreadLocalRandom;
@Service
public class UtilsService {
@Autowired
private JavaMailSender javaMailSender;
public Map<String,String> sendEmail(String email){
Date now = new Date();
String code = String.valueOf(ThreadLocalRandom.current().nextInt(100000, 1000000)); // 随机一个 4位长度的验证码 使用线程安全的随机生成器
System.out.println(code);
SimpleMailMessage message=new SimpleMailMessage();
message.setFrom("zzac0420@163.com"); // 发送人
message.setTo(email);
message.setSentDate(now);
message.setSubject("【ZZAC Of Game】登录邮箱验证");
message.setText("您本次登录的验证码是:" + code + ",有效期5分钟");
javaMailSender.send(message);
Map<String,String> map = new HashMap<>();
map.put("error_message" ,"success");
return map;
}
}
需要注意的就是需要加入setFrom 为 yml 中设置的发送人的邮箱
还有其他配置可以自行百度,这里不再赘述,简单的应用了一下java邮箱的发送,作为记录