Springboot实现邮箱验证码功能

首先我们在controller写一个接口



/**
 * @author 作者: 青衫烟雨客
 * @version 版本: 1.0
 * @description 描述: 邮箱验证码发送接口类,实现简单文本验证码的发送功能
 * <p>
 * 此接口接收一个包含邮箱信息的请求实体(EmailRequest),并负责处理邮件发送逻辑,
 * 发送完成后返回一个封装了响应状态和数据的对象(R)。
 * <p>
 * 注意:该接口方法在执行过程中可能会抛出jakarta.mail.MessagingException和UnsupportedEncodingException异常,
 * 分别对应邮件发送过程中的通信错误以及编码格式不支持的情况。
 * @param: emailRequest 请求参数对象,包含待发送验证码的邮箱地址等信息
 * @return 返回值类型为R,通常包含操作结果状态、消息及可能的数据内容
 * @throws jakarta.mail.MessagingException 在邮件发送过程中出现的通信异常
 * @throws UnsupportedEncodingException 编码格式不被支持时抛出的异常
 * @date 创建日期: 2024/2/26 下午 10:55
 */
public interface MailboxCollection {
    R putCode(EmailRequest emailRequest) throws MessagingException, UnsupportedEncodingException;
}

实现controller接口



@RestController
@Slf4j
@RequestMapping("/sendCode")
public class mailboxController implements MailboxCollection {
    @Autowired
    private mailBoxServiceImp serviceImp;

    @PostMapping()
    @Log
    public R putCode(@RequestBody EmailRequest emailRequest) {

        try {
            String s = serviceImp.sendEmail(emailRequest);
            log.info("邮箱验证码发送");
            return R.success(s);
        } catch (Exception e) {
            // 如果未使用@ControllerAdvice处理全局异常,则在此处捕获并处理
            log.error("发送邮件时发生异常", e);
            return R.success(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("发送HTML邮件时发生错误: " + e.getMessage()));
        }

    }
}

将逻辑放到server层处理

Server接口



public interface MailBoxService {
    String sendEmail(EmailRequest emailRequest) throws MessagingException, UnsupportedEncodingException;
}

实现Server接口

package com.chao.service.imp;

import com.chao.pojo.EmailRequest;
import com.chao.service.MailBoxService;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import java.io.UnsupportedEncodingException;

import static com.chao.utils.VerificationCodeGenerator.generateRandomCode;

/**
 * 邮箱服务实现类,实现了 {@link MailBoxService} 接口,
 * 提供了发送带有随机验证码的电子邮件的功能。
 *
 * @author 青衫烟雨客
 * @since 1.0
 */
@Service
@Slf4j
public class mailBoxServiceImp implements MailBoxService {

    /**
     * Spring Boot 自动注入的 JavaMailSender 对象,用于发送邮件。
     */
    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 配置文件中读取的邮件发送者用户名,默认发件人地址。
     */
    @Value("${spring.mail.username}")
    private String userName;

    /**
     * 配置文件中读取的邮件发送者显示名,默认发件人名称。
     */
    @Value("${spring.mail.addressName}")
    private String addressName;

    @Value("${spring.mail.TextHeader}")
    private String TextHeader;

    @Value("${spring.mail.TextEnd}")
    private String TextEnd;

    /**
     * 发送包含验证码的电子邮件方法。
     * 根据传入的 {@link EmailRequest} 对象配置邮件的基本信息(收件人、主题),
     * 并生成一个随机验证码作为邮件正文发送出去。
     * 发送成功后返回生成的验证码以便后续验证使用。
     *
     * @param emailRequest 邮件请求对象,包含收件人地址和邮件主题等信息
     * @return 发送的验证码字符串
     * @throws MessagingException           发生邮件发送相关错误时抛出异常
     * @throws UnsupportedEncodingException 编码格式不支持时抛出异常
     */
    @Override
    public String sendEmail(@NotNull EmailRequest emailRequest) throws MessagingException, UnsupportedEncodingException {
        // 获取收件人地址
        String to = emailRequest.getTo();
        // 获取邮件主题
        String subject = emailRequest.getSubject();

        // 创建MIME邮件消息对象
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        // 创建MIME邮件帮助器对象,用于设置邮件内容
        MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true);

        // 检查收件人地址有效性
        if (to == null || to.isEmpty()) {
            throw new IllegalArgumentException("收件人地址不能为空或空");
        }

        // 设置发件人信息(用户名和显示名)
        message.setFrom(userName, addressName);

        // 设置收件人地址
        message.setTo(to);

        // 设置邮件主题
        message.setSubject(subject);

        // 生成并设置邮件正文(验证码)
        String verificationCode = generateRandomCode(5);
        message.setText(TextHeader + ":" + verificationCode + ","+TextEnd);

        // 发送邮件
        javaMailSender.send(mimeMessage);

        // 返回生成并发送的验证码
        return verificationCode;
    }
}

在配置文件增加以下内容: 


  mail:
    # 邮件服务器地址,这里以smtp.example.com为例,实际应替换为你的SMTP邮件服务器地址
    host: smtp.qq.com
    # SMTP服务器端口,常见的有25、465(SSL)和587(STARTTLS),此处配置为587
    port: 465
    addressName: 邮箱主题
    # 发送邮件的用户名,通常是你的真实邮箱地址
    username: 邮箱地址
    password: 邮箱秘钥
    TextHeader: 您的验证码是
    TextEnd :邮件验证码的后半段
    # 发送邮件的密码,如果是使用应用专用密码或授权码,请填入对应的值
    # 注意:对于某些邮件服务提供商,如Gmail,可能需要创建一个应用特定密码或启用“少安全应用”设置
    properties:
      mail:
      smtp:
        # 是否启用SMTP身份验证,大多数情况下应设为true
        auth: true
        starttls:
        enable: true

R 的后端响应模板



@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据

    //增删改 成功响应


    public static @NotNull R success() {
        return new R(1, "success" , null);
    }

    //查询 成功响应

    public static @NotNull R success(Object data) {
        return new R(1, "success" , data);
    }

    //失败响应

    public static @NotNull R error(String msg) {
        return new R(0, msg, null);
    }
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要在Spring Boot中集成邮箱验证码功能,你可以按照以下步骤进行操作: 1. 在项目的pom.xml文件中添加mail模块的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 这样就可以使用Spring Boot提供的邮件功能了。\[1\] 2. 在配置文件(application.properties或application.yml)中填写相关的邮箱配置,例如使用163邮箱: ```properties # Mail spring.mail.host=smtp.163.com spring.mail.username=your-email@163.com spring.mail.password=your-password spring.mail.default-encoding=UTF-8 mail.from=your-email@163.com ``` 其中,`spring.mail.host`是SMTP服务器地址,`spring.mail.username`和`mail.from`是你的邮箱地址,`spring.mail.password`是你的邮箱授权码(不是邮箱密码)。你需要在相关邮箱设置中开启SMTP服务,并获取授权码。\[2\]\[3\] 3. 在你的代码中使用JavaMailSender发送邮件,可以通过注入`JavaMailSender`对象来实现: ```java @Autowired private JavaMailSender javaMailSender; public void sendVerificationCode(String email, String code) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(email); message.setSubject("验证码"); message.setText("您的验证码是:" + code); javaMailSender.send(message); } ``` 以上代码示例中,`sendVerificationCode`方法用于发送验证码邮件,其中`email`是收件人邮箱地址,`code`是验证码内容。你可以根据实际需求自定义邮件的主题和内容。 这样,你就可以在Spring Boot中集成邮箱验证码功能了。记得替换相关配置为你自己的邮箱信息。 #### 引用[.reference_title] - *1* *2* *3* [Spring Boot 整合163或者qq邮箱发送验证码](https://blog.csdn.net/hghjgkjn/article/details/125952509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

青山烟雨客:-)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值