网易邮箱发送邮件实现登录功能

网易邮箱发送邮件实现登录功能

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、效果

获取验证码:
在这里插入图片描述

登录:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值