21301050 | c519f71 | 2025-06-04 17:03:04 +0800 | [diff] [blame] | 1 | package com.pt5.pthouduan.service; |
| 2 | |
| 3 | import org.springframework.beans.factory.annotation.Autowired; |
| 4 | import org.springframework.mail.SimpleMailMessage; |
| 5 | import org.springframework.mail.javamail.JavaMailSender; |
| 6 | import org.springframework.stereotype.Service; |
| 7 | |
| 8 | import java.util.HashMap; |
| 9 | import java.util.Map; |
| 10 | import java.util.Random; |
| 11 | |
| 12 | @Service |
| 13 | public class EmailService { |
| 14 | |
| 15 | @Autowired |
| 16 | private JavaMailSender mailSender; |
| 17 | |
| 18 | // 存储邮箱和验证码的映射(实际项目中应该用Redis等缓存) |
| 19 | private final Map<String, String> emailCodeMap = new HashMap<>(); |
| 20 | |
| 21 | /** |
| 22 | * 发送验证码到指定邮箱 |
| 23 | * @param email 目标邮箱 |
| 24 | * @return 是否发送成功 |
| 25 | */ |
| 26 | public boolean sendVerificationCode(String email) { |
| 27 | // 生成6位随机验证码 |
| 28 | String code = generateRandomCode(6); |
| 29 | |
| 30 | // 存储验证码(5分钟有效) |
| 31 | emailCodeMap.put(email, code); |
| 32 | |
| 33 | try { |
| 34 | SimpleMailMessage message = new SimpleMailMessage(); |
| 35 | message.setFrom("zhutai940@163.com"); // 发件人 |
| 36 | message.setTo(email); // 收件人 |
| 37 | message.setSubject("您的注册验证码"); // 主题 |
| 38 | message.setText("您的验证码是: " + code + ",5分钟内有效。"); // 内容 |
| 39 | |
| 40 | mailSender.send(message); |
| 41 | return true; |
| 42 | } catch (Exception e) { |
| 43 | e.printStackTrace(); |
| 44 | return false; |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | /** |
| 49 | * 验证邮箱和验证码是否匹配 |
| 50 | * @param email 邮箱 |
| 51 | * @param code 验证码 |
| 52 | * @return 是否验证通过 |
| 53 | */ |
| 54 | public boolean verifyCode(String email, String code) { |
| 55 | String storedCode = emailCodeMap.get(email); |
| 56 | return storedCode != null && storedCode.equals(code); |
| 57 | } |
| 58 | |
| 59 | /** |
| 60 | * 生成随机验证码 |
| 61 | * @param length 验证码长度 |
| 62 | * @return 验证码字符串 |
| 63 | */ |
| 64 | private String generateRandomCode(int length) { |
| 65 | String numbers = "0123456789"; |
| 66 | Random random = new Random(); |
| 67 | StringBuilder sb = new StringBuilder(); |
| 68 | |
| 69 | for (int i = 0; i < length; i++) { |
| 70 | sb.append(numbers.charAt(random.nextInt(numbers.length()))); |
| 71 | } |
| 72 | |
| 73 | return sb.toString(); |
| 74 | } |
| 75 | } |