网易邮箱发送邮件实现登录功能
0、登录自己的网易云邮箱
1、依赖
<!--邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、application.yml文件
spring:
mail:
host: smtp.163.com # 配置 smtp 服务器地址
port: 465 # smtp 服务器的端口 http 25 https 465
username: xxx.com # 配置邮箱用户名(你的邮箱地址)
password: # 配置申请到的授权码(刚让复制的授权码)
default-encoding: UTF-8 # 配置邮件编码
redis:
database: chery
key:
captcha: 'ums:captcha_codes'
expire:
common: 86400 # 24小时
captcha: 120
3、发送邮件类并存入Redis里面
public class CaptchaController {
@Value("${redis.expire.captcha}")
privateLong REDIS_EXPIRE;
@Value("${redis.database}")
private String REDIS_DATABASE;
@Value("${redis.key.captcha}")
private String REDIS_CAPTCHA;
@Autowired
JavaMailSender mailSender;
@ApiOperation("发送邮件")
@PostMapping("/sendMimeMail")
public CommonResult sendMimeMail(String email) {
// 保存验证码信息
String uuid = IdUtils.simpleUUID();
String verifyKey = uuid;
String code = String.valueOf(RandomUtil.randomInt(1000, 9999));
try {
// 存入 Redis
String key = REDIS_DATABASE + ":" + REDIS_CAPTCHA + ":" + verifyKey;
redisService.set(key , code , REDIS_EXPIRE);
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setSubject("验证码邮件");//主题
mailMessage.setText("您的验证码是:"+code);//内容
mailMessage.setTo(email);//发给谁
mailMessage.setFrom("h2825084776@163.com");//你自己的邮箱
System.out.println("发送成功!");
mailSender.send(mailMessage);//发送
Map<String ,Object> result = new HashMap<>();
result.put("uuid",uuid);
result.put("code", code); 验证码不要传递给前台,这里为了测试方便传入前台了
return CommonResult.success(result);
}catch (Exception e){
throw new ApiException("失败");
}
}
}
4、登录
controller层:
@ApiOperation(value = "用户登录")
@PostMapping("/login")
public CommonResult login(@RequestBody @Validated SysUserLoginParam user) {
if (!StringUtils.hasText(user.getUsername())) {
// 提示必须传入用户名
throw new ApiException(ErrorEnum.INVALID_PASSWORD);
}
if (!StringUtils.hasText(user.getPassword())) {
// 提示必须传入密码
throw new ApiException(ErrorEnum.INVALID_PASSWORD);
}
String token = sysUserService.login(user);
Map<String, String> tokenMap = new HashMap<>();
tokenMap.put("token", token);
tokenMap.put("tokenHead", tokenHead);
return CommonResult.success(tokenMap);
}
service层
@Override
public String login(SysUserLoginParam user) {
//校验验证码
validateEmailCode(user.getCode(), user.getUuid());
// 后续登录代码自行实现,此处省略。。。。。
return "xxx";
}
service层:
/**
* 校验验证码
* @param code 用户填写的验证码
* @param uuid 用户传递过来随机的UUID
*/
private void validateEmailCode(String code, String uuid) {
// 从Redis里面获取存入的值
String key = REDIS_DATABASE + ":" + REDIS_CAPTCHA + ":" + uuid;
String captcha = (String) redisService.get(key);
if (captcha == null) {
throw new ApiException(ErrorEnum.CAPTCHA_WRONG);
}
if (!code.equalsIgnoreCase(captcha)) {
throw new ApiException(ErrorEnum.CAPTCHA_WRONG);
}
}
5、效果
获取验证码:
登录: