From 865eeb5d1b4d883ba9a70b64e4f8e3e4d271ce4d Mon Sep 17 00:00:00 2001
From: PC-202403201522\Administrator <1041918560@qq.com>
Date: Mon, 13 May 2024 14:42:43 +0800
Subject: [PATCH] 增加邮箱校验

---
 src/main/resources/application.properties              |   18 +++
 src/main/java/com/nq/controller/UserApiController.java |   16 ++
 src/main/java/com/nq/utils/email/CodeUtil.java         |   39 +++++++
 src/main/java/com/nq/pojo/User.java                    |    7 +
 src/main/java/com/nq/utils/email/EmailService.java     |   32 ++++++
 src/main/java/com/nq/service/IUserService.java         |    4 
 src/main/java/com/nq/utils/email/EmailUtil.java        |  127 +++++++++++++++++++++++++
 src/main/java/com/nq/service/impl/UserServiceImpl.java |   32 +++++-
 8 files changed, 267 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/nq/controller/UserApiController.java b/src/main/java/com/nq/controller/UserApiController.java
index 8c42607..26a3fa0 100644
--- a/src/main/java/com/nq/controller/UserApiController.java
+++ b/src/main/java/com/nq/controller/UserApiController.java
@@ -57,10 +57,22 @@
     //注册
     @RequestMapping(value = {"reg.do"}, method = {RequestMethod.POST})
     @ResponseBody
-    public ServerResponse reg(@RequestParam("agentCode") String agentCode, @RequestParam("phone") String phone, @RequestParam(value = "yzmCode", defaultValue = "") String yzmCode, @RequestParam("userPwd") String userPwd, HttpServletRequest httpServletRequest) {
-        return this.iUserService.reg(yzmCode, agentCode, phone, userPwd, httpServletRequest);
+    public ServerResponse reg(@RequestParam("agentCode") String agentCode,
+                              @RequestParam("phone") String phone,
+                              @RequestParam(value = "yzmCode", defaultValue = "") String yzmCode,
+                              @RequestParam("userPwd") String userPwd,
+                              @RequestParam("email") String email,
+                              HttpServletRequest httpServletRequest) {
+        return this.iUserService.reg(yzmCode, agentCode, phone, userPwd, email,httpServletRequest);
     }
 
+    @RequestMapping(value = {"sendMailCode.do"}, method = {RequestMethod.POST})
+    @ResponseBody
+    public ServerResponse sendMailCode(@RequestParam("email") String email) {
+        return this.iUserService.sendMailCode(email);
+    }
+
+
     //登录
     @RequestMapping(value = {"login.do"}, method = {RequestMethod.POST})
     @ResponseBody
diff --git a/src/main/java/com/nq/pojo/User.java b/src/main/java/com/nq/pojo/User.java
index 19d5ffb..86236c0 100644
--- a/src/main/java/com/nq/pojo/User.java
+++ b/src/main/java/com/nq/pojo/User.java
@@ -38,4 +38,11 @@
     private String withdrawalPwd;
     private String vaildNumber;
 
+    private String email;
+
+    /**
+     * ifsc
+     * */
+    private String ifsc;
+
 }
diff --git a/src/main/java/com/nq/service/IUserService.java b/src/main/java/com/nq/service/IUserService.java
index 7e4124d..af09c4b 100644
--- a/src/main/java/com/nq/service/IUserService.java
+++ b/src/main/java/com/nq/service/IUserService.java
@@ -8,7 +8,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 public interface IUserService {
-  ServerResponse reg(String paramString1, String paramString2, String paramString3, String paramString4, HttpServletRequest paramHttpServletRequest);
+  ServerResponse reg(String paramString1, String paramString2, String paramString3, String paramString4,String paramString5, HttpServletRequest paramHttpServletRequest);
 
   ServerResponse login(String paramString1, String paramString2, HttpServletRequest paramHttpServletRequest);
 
@@ -90,4 +90,6 @@
   ServerResponse queryMyOption(String code, HttpServletRequest request);
 
   ServerResponse getMoenyLog(String type,HttpServletRequest request);
+
+  ServerResponse sendMailCode(String toMail);
 }
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index 05201dc..cb51cf3 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -14,6 +14,8 @@
 import com.nq.pojo.reponse.RUserAssets;
 import com.nq.service.*;
 import com.nq.utils.UserPointUtil;
+import com.nq.utils.email.CodeUtil;
+import com.nq.utils.email.EmailService;
 import com.nq.utils.timeutil.DateTimeUtil;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.SymmetricCryptoUtil;
@@ -45,8 +47,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
 
 @Service("iUserService")
 public class UserServiceImpl implements IUserService {
@@ -128,14 +132,24 @@
     @Resource
     ApplyLeverMapper applyLeverMapper;
 
+    @Autowired
+    EmailService emailService;
+    @Autowired
+    CodeUtil codeUtil;
+    @Autowired
+    private StringRedisTemplate redisTemplate;
 
-
-    public ServerResponse reg(String yzmCode, String agentCode, String phone, String userPwd, HttpServletRequest request) {
-        if (StringUtils.isBlank(agentCode) || StringUtils.isBlank(phone) ||
-                StringUtils.isBlank(userPwd) || StringUtils.isBlank(yzmCode)) {
+    public ServerResponse reg(String yzmCode, String agentCode, String phone, String userPwd,String email, HttpServletRequest request) {
+        if (StringUtils.isAnyBlank(agentCode,phone,userPwd,yzmCode,email)) {
             return ServerResponse.createByErrorMsg("注册失败。该参数不能为空",request);
         }
+        Assert.isTrue(userMapper.selectCount(new LambdaQueryWrapper<User>().eq(User::getEmail,email)) == 0,
+                "Registration failed, the mobile mail number has been registered");
 
+        String redisCode = redisTemplate.opsForValue().get(codeUtil.KEY_PREFIX + yzmCode);
+        if (redisCode == null || !yzmCode.equals(redisCode)) {
+            return ServerResponse.createByErrorMsg("Verification code error");
+        }
 
         String keys = "AliyunSmsCode:" + phone;
         String redis_yzm = RedisShardedPoolUtils.get(keys);
@@ -166,7 +180,7 @@
         user.setAgentName(agentUser.getAgentName());
         user.setPhone(phone);
         user.setUserPwd(SymmetricCryptoUtil.encryptPassword(userPwd));
-
+        user.setEmail(email);
 
         user.setAccountType(Integer.valueOf(0));
         user.setIsLock(Integer.valueOf(1));
@@ -1124,6 +1138,14 @@
         queryWrapper.eq("user_id",user.getId());
         return  ServerResponse.createBySuccess(mapper.selectList(queryWrapper));
     }
+    @Override
+    public ServerResponse sendMailCode(String MailCode) {
+        if (MailCode == null || MailCode.equals("")) {
+            return ServerResponse.createByErrorMsg("The mobile mail number and password cannot be empty");
+        }
+        emailService.sendSimpleMail(MailCode, "barclays register code", codeUtil.generateVerificationCode());
+        return ServerResponse.createBySuccessMsg("send code success!");
+    }
 
 }
 
diff --git a/src/main/java/com/nq/utils/email/CodeUtil.java b/src/main/java/com/nq/utils/email/CodeUtil.java
new file mode 100644
index 0000000..df7d725
--- /dev/null
+++ b/src/main/java/com/nq/utils/email/CodeUtil.java
@@ -0,0 +1,39 @@
+package com.nq.utils.email;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class CodeUtil {
+
+    //存储时间
+    private static final int EXPIRATION_TIME_IN_MINUTES = 3;
+    //键名
+    public static final String KEY_PREFIX ="yzm";
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+    public String generateVerificationCode() {
+        // 生成6位随机数字验证码
+        String code = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
+        String key = KEY_PREFIX+code;
+        redisTemplate.opsForValue().set(key, code, EXPIRATION_TIME_IN_MINUTES, TimeUnit.MINUTES);
+        return code;
+    }
+
+    // 验证验证码是否正确
+    public boolean verifyCode(String userId, String code, String key) {
+        key = key + userId;
+        String storedCode = redisTemplate.opsForValue().get(key);
+        return code.equals(storedCode);
+    }
+
+    //删除redis中验证码
+    public void deleteCode(String userId, String key) {
+        key = key + userId;
+        redisTemplate.delete(key);
+    }
+
+}
diff --git a/src/main/java/com/nq/utils/email/EmailService.java b/src/main/java/com/nq/utils/email/EmailService.java
new file mode 100644
index 0000000..e713d1f
--- /dev/null
+++ b/src/main/java/com/nq/utils/email/EmailService.java
@@ -0,0 +1,32 @@
+package com.nq.utils.email;
+
+public interface EmailService {
+    /**
+     * 发送文本邮件
+     *
+     * @param to      收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    void sendSimpleMail(String to, String subject, String content);
+
+    /**
+     * 发送HTML邮件
+     *
+     * @param to      收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    public void sendHtmlMail(String to, String subject, String content);
+
+    /**
+     * 发送带附件的邮件
+     *
+     * @param to       收件人
+     * @param subject  主题
+     * @param content  内容
+     * @param filePath 附件
+     */
+    public void sendAttachmentsMail(String to, String subject, String content, String filePath);
+
+}
diff --git a/src/main/java/com/nq/utils/email/EmailUtil.java b/src/main/java/com/nq/utils/email/EmailUtil.java
new file mode 100644
index 0000000..1119579
--- /dev/null
+++ b/src/main/java/com/nq/utils/email/EmailUtil.java
@@ -0,0 +1,127 @@
+package com.nq.utils.email;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.MimeMessageHelper;
+import org.springframework.stereotype.Service;
+
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.io.File;
+import java.util.regex.Pattern;
+
+@Service
+public class EmailUtil implements EmailService
+{
+    private static final Logger log = LoggerFactory.getLogger(EmailService.class);
+
+
+    //Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口,这里直接注入即可使用
+    @Autowired
+    private JavaMailSender mailSender;
+
+    // 配置文件中我的谷歌邮箱
+    @Value("${spring.mail.username}")
+    private String from;
+
+    /**
+     * 简单文本邮件
+     * @param to 收件人
+     * @param subject 主题
+     * @param content 内容
+     */
+    @Override
+    public void sendSimpleMail(String to, String subject, String content) {
+        //创建SimpleMailMessage对象
+        SimpleMailMessage message = new SimpleMailMessage();
+        //邮件发送人
+        message.setFrom(from);
+        //邮件接收人
+        message.setTo(to);
+        //邮件主题
+        message.setSubject(subject);
+        //邮件内容
+        message.setText(content);
+        //发送邮件
+        mailSender.send(message);
+    }
+
+    /**
+     * html邮件
+     * @param to 收件人,多个时参数形式 :"xxx@xxx.com,xxx@xxx.com,xxx@xxx.com"
+     * @param subject 主题
+     * @param content 内容
+     */
+    @Override
+    public void sendHtmlMail(String to, String subject, String content) {
+        //获取MimeMessage对象
+        MimeMessage message = mailSender.createMimeMessage();
+        MimeMessageHelper messageHelper;
+        try {
+            messageHelper = new MimeMessageHelper(message, true);
+            //邮件发送人
+            messageHelper.setFrom(from);
+            //邮件接收人,设置多个收件人地址
+            InternetAddress[] internetAddressTo = InternetAddress.parse(to);
+            messageHelper.setTo(internetAddressTo);
+            //messageHelper.setTo(to);
+            //邮件主题
+            message.setSubject(subject);
+            //邮件内容,html格式
+            messageHelper.setText(content, true);
+            //发送
+            mailSender.send(message);
+            //日志信息
+            log.info("邮件已经发送。");
+        } catch (Exception e) {
+            log.error("发送邮件时发生异常!", e);
+        }
+    }
+
+    /**
+     * 带附件的邮件
+     * @param to 收件人
+     * @param subject 主题
+     * @param content 内容
+     * @param filePath 附件
+     */
+    @Override
+    public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
+        MimeMessage message = mailSender.createMimeMessage();
+        try {
+            MimeMessageHelper helper = new MimeMessageHelper(message, true);
+            helper.setFrom(from);
+            helper.setTo(to);
+            helper.setSubject(subject);
+            helper.setText(content, true);
+
+            FileSystemResource file = new FileSystemResource(new File(filePath));
+            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
+            helper.addAttachment(fileName, file);
+            mailSender.send(message);
+            //日志信息
+            log.info("邮件已经发送。");
+        } catch (Exception e) {
+            log.error("发送邮件时发生异常!", e);
+        }
+    }
+
+    /**
+     * 验证邮箱格式
+     * @param email
+     * @return
+     */
+    public  boolean isEmail(String email) {
+        if (email == null || email.length() < 1 || email.length() > 256) {
+            return false;
+        }
+        Pattern pattern = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
+        return pattern.matcher(email).matches();
+    }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index dbaf016..1961dca 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -169,7 +169,25 @@
 
 
 
+#?????
+news.main.url=http://eminfo.eastmoney.com
+spring.main.allow-circular-references=true
 
+spring.mail.host=smtp.gmail.com
+# ????????
+spring.mail.port=587
+# ????????????
+spring.mail.username=barclays5510@gmail.com
+# ????????????????????????????
+spring.mail.password=nppwibbarixvbnqk
+# ??TLS??
+spring.mail.properties.mail.smtp.starttls.enable=true
+# ??????????
+spring.mail.properties.mail.smtp.auth=true
+# ??????
+spring.mail.properties.mail.transport.protocol=smtp
+
+properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
 
 
 

--
Gitblit v1.9.3