JavaMail的使用

1. 项目配置

1.1 Spring Boot 配置

在 application.properties 中可以配置 Spring Boot 应用的各种属性,例如邮件服务、数据库连接等。

spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=6666666666@qq.com
spring.mail.password= #SMTP 相关的认证
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
1.2 跨域配置(CorsConfig.java)

通过 CorsConfig 类配置跨域访问,允许所有来源、所有请求头和所有请求方法的跨域请求,并允许携带凭证:

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOriginPattern("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

2. 服务接口定义

EmailService 接口定义了发送验证码和验证验证码的方法:

import com.example.house.Utils.Result;

public interface EmailService {
    Result<String> sendVerificationCode(String email);
    Result<Boolean> verifyVerificationCode(String email, String code);
}

3. 服务实现类

EmailServiceImpl 类实现了 EmailService 接口,具体实现了发送和验证验证码的逻辑:

import com.example.house.Service.EmailService;
import com.example.house.Utils.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Service
public class EmailServiceImpl implements EmailService {

    private final JavaMailSender javaMailSender;

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

    private static final Map<String, String> verificationCodes = new HashMap<>();

    public EmailServiceImpl(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    @Override
    public Result<String> sendVerificationCode(String email) {
        try {
            String code = generateVerificationCode();
            verificationCodes.put(email, code);
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(email);
            message.setSubject("注册验证码");
            message.setText("您的注册验证码是:" + code);
            javaMailSender.send(message);
            return Result.success("验证码已发送,请查收邮件");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.fail(500, "发送验证码失败:" + e.getMessage());
        }
    }

    @Override
    public Result<Boolean> verifyVerificationCode(String email, String code) {
        String storedCode = verificationCodes.get(email);
        if (storedCode != null && storedCode.equals(code)) {
            verificationCodes.remove(email);
            return Result.success(true);
        }
        return Result.success(false);
    }

    private String generateVerificationCode() {
        Random random = new Random();
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            code.append(random.nextInt(10));
        }
        return code.toString();
    }
}
  • sendVerificationCode 方法:

    • 生成一个 6 位的随机验证码。
    • 将验证码存储在 verificationCodes 映射中,键为用户邮箱。
    • 创建一个 SimpleMailMessage 对象,设置发件人、收件人、主题和正文。
    • 使用 JavaMailSender 发送邮件。
    • 根据发送结果返回成功或失败的 Result 对象。
  • verifyVerificationCode 方法:

    • 从 verificationCodes 映射中获取存储的验证码。
    • 比较用户输入的验证码和存储的验证码,如果匹配则返回 true,否则返回 false

4. 控制器

EmailController 类提供了发送和验证验证码的 RESTful 接口:

package com.example.house.Controller;

import com.example.house.Service.EmailService;
import com.example.house.Utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/email")
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/sendCode")
    public Result<String> sendVerificationCode(@RequestParam String email) {
        System.out.println("Received email: " + email);
        return emailService.sendVerificationCode(email);
    }

    @PostMapping("/verifyCode")
    public Result<Boolean> verifyVerificationCode(@RequestParam String email, @RequestParam String code) {
        return emailService.verifyVerificationCode(email, code);
    }
}
  • /email/sendCode 接口:接收用户邮箱作为参数,调用 EmailService 的 sendVerificationCode 方法发送验证码邮件。
  • /email/verifyCode 接口:接收用户邮箱和验证码作为参数,调用 EmailService 的 verifyVerificationCode 方法验证验证码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值