QQ邮箱发送验证码(Springboot)

一、邮箱发送服务准备

在qq邮箱的设置中选择账号下开启服务。

开启时可能会有短信验证,开启后显示验证码之类的一串英文,复制保存起来,在配置文件中会使用到。

二、后端依赖及配置

依赖

在pom.yml文件中添加相关依赖,redis的相关依赖需要根据项目的版本进行选择相符的(下面依赖的项目版本为2.7.6

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail  邮箱依赖-->
        <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>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.17.5</version>
        </dependency>

配置文件

  #发送邮箱验证码
  mail:
    #发送者邮箱
    username: **********@qq.com(自己的邮箱)
    #申请到的授权码
    password: *******(开启服务时的英文)
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    #端口号465或587
    port: 465
    protocol: smtps
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
          #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
          debug: true
          ssl: true

三、实现步骤

邮箱工具类

/**
 * 邮箱工具类
 * @author zero
 * @date 2025-06-05 17:26
 */
@Component
public class MailUtils {

    @Resource
    private JavaMailSenderImpl mailSender;

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @Value("${spring.mail.username}") String sendEmail;

    /**
     * 发送信息
     * @param email 邮箱
     * @return 是否发送信息成功
     */
    public boolean sendMail(String email) throws MessagingException {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //生成随机验证码
        String code = generateCode(6);
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        //设置一个html邮件信息
        helper.setText("<p style='color: blue'>欢迎来到错题收集刷题系统!你的验证码为:" + code + "(有效期为一分钟)</p>", true);
        //设置邮件主题名
        helper.setSubject("注册验证码----验证码");
        //发给谁-》邮箱地址
        helper.setTo(email);
        //谁发的-》发送人邮箱
        helper.setFrom(sendEmail);
        //将邮箱验证码以邮件地址为key存入redis,1分钟过期
        redisTemplate.opsForValue().set(email, code, Duration.ofMinutes(1));
        mailSender.send(mimeMessage);
        return true;
    }

    /**
     * 生成指定长度的验证码
     * @param length 长度
     * @return 指定长度的验证码
     */
    public static String generateCode(int length) {
        return UUID.randomUUID().toString().substring(0, length);
    }
}

 Controller层

/**
 * 获取注册验证码
 *
 * @param email 邮箱
 * @return 验证码信息
 */
@PostMapping("/sendEmail")
public BaseResponse<String> sendMailTest(@RequestParam String email) throws MessagingException {
    if (email == null) {
        throw new BusinessException(ErrorCode.PARAMS_EMPTY_ERROR, "邮箱为空");
    }
    String code = redisTemplate.opsForValue().get(email);
    if (!StringUtils.isEmpty(code)) {
        throw new BusinessException(ErrorCode.PARAMS_ERROR, "email + \":\" + code + \"已存在,还未过期\"");
    }
    boolean b = mailUtils.sendMail(email);
    if (b) {
        return ResultUtils.success("验证码发送成功!");
    }
    throw new BusinessException(ErrorCode.SEND_EMAIL_ERROR, "发送验证码失败!");
}

QQ邮箱使用SMTP协议发送验证码Spring Boot应用程序通常涉及到以下几个步骤: 1. 配置环境变量:首先,你需要获取QQ邮箱的SMTP服务器地址、端口以及授权码(不是登录密码)。可以在QQ邮箱的“账户”->“POP3/IMAP/SMTP”服务设置里找到相关信息。 2. 添加依赖:在Spring Boot项目中,你需要添加`spring-boot-starter-mail`依赖,这包含了处理邮件的基础库。 3. 邮件配置:创建一个`application.properties`文件或`application.yml`,并添加以下配置: ```properties mail.smtp.host=smtp.qq.com mail.smtp.port=465 mail.smtp.auth=true mail.smtp.starttls.enable=true mail.username=<your_qq_email> mail.password=<your_authorization_code> ``` 4. 创建服务类:创建一个发送邮件的服务类,使用`JavaMailSender`接口。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { private final JavaMailSender javaMailSender; @Autowired public EmailService(JavaMailSender javaMailSender) { this.javaMailSender = javaMailSender; } public void sendVerificationCode(String toEmail, String code) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(toEmail); message.setSubject("验证邮件"); message.setText("您的验证码是:" + code); javaMailSender.send(message); } } ``` 5. 调用服务:在需要发送验证码的地方,如注册或找回密码接口,注入`EmailService`并调用`sendVerificationCode()`方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值