SpringBoot如何整合邮箱服务实现登录验证功能

写在前面

这里主要讲解大致思路

详细代码(目前部分功能还在开发完善中) 请见这里

如果个人用户还是想白嫖短信服务的话,可以看看我的这篇博客

一、开启 POP3/SMTP服务 获得的授权码

这里以qq邮箱为例

点击 设置

image-20220613103214479

点击 账户

image-20220613103512068

开启相关服务

image-20220613103812537

复制授权码

image-20220613103858601

二、导入相关依赖并配置application.yml

pom.xml

<!-- 邮件服务 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- Thymeleaf 模版,用于发送模版邮件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

application.yml

# 邮箱配置
  mail:
    host: smtp.qq.com  # 发送邮件的服务器地址
    username: 填写自己的qq邮箱账号 # 开启 IMAP/SMTP服务 的qq邮箱的账号
    password: 填写自己的授权码  # 开启 IMAP/SMTP服务 获得的授权码,而不是qq邮箱的登录密码
    default-encoding: UTF-8

三、编写对应的接口

Controller

/**
     * 发送邮箱验证码
     *
     * @param user
     * @return
     */
@PostMapping("/sendMsg")
public R<String> sendMsg(@RequestBody User user, HttpSession session) {
    // 获取邮箱账号
    String phone = user.getPhone();

    String subject = "瑞吉餐购登录验证码";

    if (StringUtils.isNotEmpty(phone)) {
        String code = ValidateCodeUtils.generateValidateCode(4).toString();
        String context = "欢迎使用瑞吉餐购,登录验证码为: " + code + ",五分钟内有效,请妥善保管!";
        log.info("code={}", code);

        // 真正地发送邮箱验证码
        userService.sendMsg(phone, subject, context);

        //  将随机生成的验证码保存到session中
        //            session.setAttribute(phone, code);

        // 验证码由保存到session 优化为 缓存到Redis中,并且设置验证码的有效时间为 5分钟
        redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);

        return R.success("验证码发送成功,请及时查看!");
    }
    return R.error("验证码发送失败,请重新输入!");
}

Service

/**
     * 发送邮箱
     * @param to
     * @param subject
     * @param context
     */
void sendMsg(String to,String subject,String context);

ServiceImpl

@Value("${spring.mail.username}")
private String from;   // 邮件发送人

@Autowired
private JavaMailSender mailSender;

@Override
public void sendMsg(String to, String subject, String context) {
    SimpleMailMessage mailMessage = new SimpleMailMessage();

    mailMessage.setFrom(from);
    mailMessage.setTo(to);
    mailMessage.setSubject(subject);
    mailMessage.setText(context);

    // 真正的发送邮件操作,从 from到 to
    mailSender.send(mailMessage);
}
  • 20
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
你可以使用Spring Boot和Thymeleaf来实现邮箱验证登录功能。下面是一些基本的步骤: 1. 添加所需的依赖:在您的项目的pom.xml文件中添加Spring Boot和Thymeleaf的依赖项。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> ``` 2. 创建一个包含登录表单的HTML页面。您可以使用Thymeleaf模板引擎来渲染页面和处理表单提交。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h1>Login</h1> <form action="/login" method="post"> <input type="email" name="email" placeholder="Email" required/> <input type="password" name="password" placeholder="Password" required/> <button type="submit">Login</button> </form> </body> </html> ``` 3. 创建一个控制器类来处理登录请求和验证逻辑。 ```java @Controller public class LoginController { @GetMapping("/login") public String showLoginForm() { return "login"; } @PostMapping("/login") public String login(@RequestParam("email") String email, @RequestParam("password") String password) { // 进行邮箱验证登录逻辑的处理 // ... return "redirect:/home"; } @GetMapping("/home") public String home() { return "home"; } } ``` 4. 创建一个用于显示登录成功页面的HTML模板。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Home</title> </head> <body> <h1>Welcome!</h1> </body> </html> ``` 这只是一个基本的示例,您可能还需要添加更多的逻辑来实现完整的邮箱验证登录功能。您可以使用Spring Security来处理用户认证和授权,以及使用Java Mail API来发送验证邮件。希望这个简单的示例能帮助您入门。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值