From bb6fe349b56f454f9ec6f01c32f652ecd416f151 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 16 Sep 2025 14:28:38 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/controller/UserApiController.java | 21 +++++++
src/main/java/com/nq/utils/email/EmailValidator.java | 55 ++++++++++++++++++
src/main/java/com/nq/utils/email/GmailSender.java | 71 +++++++++++++++++++++++
src/main/java/com/nq/service/impl/UserServiceImpl.java | 12 ++-
4 files changed, 154 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/nq/controller/UserApiController.java b/src/main/java/com/nq/controller/UserApiController.java
index baf50d6..62b3bc4 100644
--- a/src/main/java/com/nq/controller/UserApiController.java
+++ b/src/main/java/com/nq/controller/UserApiController.java
@@ -18,6 +18,8 @@
import com.nq.utils.PropertiesUtil;
+import com.nq.utils.email.EmailValidator;
+import com.nq.utils.email.GmailSender;
import com.nq.utils.redis.CookieUtils;
import com.nq.utils.redis.JsonUtil;
@@ -85,6 +87,25 @@
return this.iUserService.reg(yzmCode, agentCode, phone, userPwd, httpServletRequest);
}
+ //发送邮件
+ @RequestMapping(value = {"sendmail.do"}, method = {RequestMethod.POST})
+ @ResponseBody
+ public ServerResponse sendmail(@RequestParam("email") String email,HttpServletRequest request) {
+ try {
+ if(!EmailValidator.isValidEmail(email)){
+ return ServerResponse.createByErrorMsg("请输入正确的邮箱格式",request);
+ }
+ String code = GmailSender.generateSecureSixDigitCode();
+ String keys = "emailCode:" + email;
+ RedisShardedPoolUtils.setEx(keys, code, 60);
+ GmailSender.sendEmail(email,"verification code",code);
+ return ServerResponse.createByErrorMsg("发送成功!",request);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ServerResponse.createByErrorMsg("验证码发送失败",request);
+ }
+ }
+
//登录
@RequestMapping(value = {"login.do"}, method = {RequestMethod.POST})
@ResponseBody
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index 26bb678..e1df447 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -17,6 +17,7 @@
import com.nq.pojo.reponse.RUserAssets;
import com.nq.service.*;
import com.nq.utils.UserPointUtil;
+import com.nq.utils.email.EmailValidator;
import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.utils.PropertiesUtil;
@@ -147,16 +148,17 @@
StringUtils.isBlank(userPwd) || StringUtils.isBlank(yzmCode)) {
return ServerResponse.createByErrorMsg("注册失败。该参数不能为空",request);
}
+ if(!EmailValidator.isValidEmail(phone)){
+ return ServerResponse.createByErrorMsg("请输入正确的邮箱格式",request);
+ }
-
- String keys = "AliyunSmsCode:" + phone;
+ String keys = "emailCode:" + phone;
String redis_yzm = RedisShardedPoolUtils.get(keys);
log.info("redis_yzm = {},yzmCode = {}", redis_yzm, yzmCode);
if (!yzmCode.equals(redis_yzm) && !"6666".equals(yzmCode)) {
- return ServerResponse.createByErrorMsg("由于验证码不正确,注册失败。过程",request);
+ return ServerResponse.createByErrorMsg("验证码不正确或已过期!,注册失败",request);
}
-
AgentUser agentUser = this.iAgentUserService.findByCode(agentCode);
if (agentUser == null) {
@@ -204,7 +206,7 @@
public ServerResponse login(String phone, String userPwd, HttpServletRequest request) {
if (StringUtils.isBlank(phone) || StringUtils.isBlank(userPwd)) {
- return ServerResponse.createByErrorMsg("手机号码和密码不能为空",request);
+ return ServerResponse.createByErrorMsg("账号和密码不能为空",request);
}
userPwd = SymmetricCryptoUtil.encryptPassword(userPwd);
User user = this.userMapper.login(phone, userPwd);
diff --git a/src/main/java/com/nq/utils/email/EmailValidator.java b/src/main/java/com/nq/utils/email/EmailValidator.java
new file mode 100644
index 0000000..ec99cf6
--- /dev/null
+++ b/src/main/java/com/nq/utils/email/EmailValidator.java
@@ -0,0 +1,55 @@
+package com.nq.utils.email;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @program: dabaogp
+ * @description:
+ * @create: 2025-09-16 12:00
+ **/
+public class EmailValidator {
+
+
+ // 邮箱正则表达式
+ private static final String EMAIL_REGEX =
+ "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@" +
+ "(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
+
+ // 编译正则表达式模式
+ private static final Pattern pattern = Pattern.compile(EMAIL_REGEX);
+
+ /**
+ * 验证邮箱格式是否有效
+ * @param email 待验证的邮箱地址
+ * @return 如果邮箱格式有效返回true,否则返回false
+ */
+ public static boolean isValidEmail(String email) {
+ if (email == null) {
+ return false;
+ }
+
+ Matcher matcher = pattern.matcher(email);
+ return matcher.matches();
+ }
+
+ // 测试方法
+ public static void main(String[] args) {
+ // 测试用例
+ String[] testEmails = {
+ "test@example.com",
+ "user.name@example.com",
+ "user.name+tag@example.com",
+ "user@sub.example.co.uk",
+ "invalid-email",
+ "missing@domain",
+ "@missingusername.com",
+ "user@.com"
+ };
+
+ for (String email : testEmails) {
+ System.out.println(email + " : " + (isValidEmail(email) ? "有效" : "无效"));
+ }
+ }
+
+}
diff --git a/src/main/java/com/nq/utils/email/GmailSender.java b/src/main/java/com/nq/utils/email/GmailSender.java
new file mode 100644
index 0000000..ccc883d
--- /dev/null
+++ b/src/main/java/com/nq/utils/email/GmailSender.java
@@ -0,0 +1,71 @@
+package com.nq.utils.email;
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.security.SecureRandom;
+import java.util.Properties;
+
+/**
+ * @program: dabaogp
+ * @description:
+ * @create: 2025-09-16 13:44
+ **/
+public class GmailSender {
+
+ public static void sendEmail(String to, String subject, String body) {
+ // 发件人Gmail地址
+ String from = "coinzne.com@gmail.com";
+ // 使用应用专用密码,而不是常规的Gmail密码
+ String password = "pqupwyxoqedhxlfq";
+
+ // 设置邮件服务器属性
+ Properties props = new Properties();
+ props.put("mail.smtp.host", "smtp.gmail.com");
+ props.put("mail.smtp.port", "587");
+ props.put("mail.smtp.auth", "true");
+ props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
+
+ // 获取Session对象
+ Session session = Session.getInstance(props, new javax.mail.Authenticator() {
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(from, password);
+ }
+ });
+
+ try {
+ // 创建MimeMessage对象
+ Message message = new MimeMessage(session);
+
+ // 设置发件人
+ message.setFrom(new InternetAddress(from));
+
+ // 设置收件人
+ message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
+
+ // 设置邮件主题
+ message.setSubject(subject);
+
+ // 设置邮件正文
+ message.setText(body);
+
+ // 发送邮件
+ Transport.send(message);
+
+ System.out.println("邮件发送成功!");
+
+ } catch (MessagingException e) {
+ throw new RuntimeException("邮件发送失败: " + e.getMessage(), e);
+ }
+ }
+
+ /**
+ * 生成6位随机数字验证码(使用安全随机数生成器)
+ * @return 6位数字字符串
+ */
+ public static String generateSecureSixDigitCode() {
+ SecureRandom random = new SecureRandom();
+ int code = random.nextInt(900000) + 100000;
+ return String.valueOf(code);
+ }
+}
--
Gitblit v1.9.3