diff --git a/pom.xml b/pom.xml
index 7bf796e..9238ad6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,6 +96,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/example/g8backend/controller/AuthController.java b/src/main/java/com/example/g8backend/controller/AuthController.java
index 77e4130..39183c1 100644
--- a/src/main/java/com/example/g8backend/controller/AuthController.java
+++ b/src/main/java/com/example/g8backend/controller/AuthController.java
@@ -1,8 +1,10 @@
 package com.example.g8backend.controller;
 
+import com.example.g8backend.dto.UserRegisterDTO;
 import com.example.g8backend.entity.User;
 import com.example.g8backend.service.IUserService;
 import com.example.g8backend.util.JwtUtil;
+import com.example.g8backend.util.mailUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.ResponseEntity;
@@ -11,6 +13,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 @RestController
 @RequestMapping("/auth")
@@ -20,6 +23,9 @@
     private IUserService userService;
 
     @Autowired
+    private mailUtil mailUtil;
+
+    @Autowired
     private PasswordEncoder passwordEncoder;
 
     @Autowired
@@ -28,13 +34,41 @@
     @Autowired
     RedisTemplate<String, Object> redisTemplate;
 
+    // 发送验证码
+    @PostMapping("/send_verification_code")
+    public ResponseEntity<?> sendVerificationCode(@RequestBody UserRegisterDTO registerDTO) {
+        if (userService.getUserByEmail(registerDTO.getEmail()) != null) {
+            return ResponseEntity.badRequest().body("邮箱已存在");
+        }
+
+        String verificationCode = UUID.randomUUID().toString().substring(0, 6);
+        mailUtil.sendMail(registerDTO.getEmail(), "PT平台注册验证码", "您的验证码为：" + verificationCode + "，验证码十分钟内有效，请勿泄露。");
+
+        redisTemplate.opsForValue().set(registerDTO.getEmail(), verificationCode, 10 * 60, java.util.concurrent.TimeUnit.SECONDS);
+        return ResponseEntity.ok("验证码发送成功");
+    }
+
     // 用户注册
     @PostMapping("/register")
-    public ResponseEntity<?> register(@RequestBody User user) {
-        if (userService.getUserByName(user.getUserName()) != null) {
+    public ResponseEntity<?> register(@RequestBody UserRegisterDTO registerDTO) {
+        if (userService.getUserByName(registerDTO.getUserName()) != null) {
             return ResponseEntity.badRequest().body("用户名已存在");
         }
+
+        if (!redisTemplate.hasKey(registerDTO.getInvitationCode())) {
+            return ResponseEntity.badRequest().body("邀请码错误");
+        }
+        if (!registerDTO.getVerificationCode().equals(redisTemplate.opsForValue().get(registerDTO.getEmail()))) {
+            return ResponseEntity.badRequest().body("验证码错误");
+        }
+        redisTemplate.delete(registerDTO.getEmail());
+
+        User user = new User();
+        user.setUserName(registerDTO.getUserName());
+        user.setPassword(passwordEncoder.encode(registerDTO.getPassword()));
+        user.setEmail(registerDTO.getEmail());
         userService.registerUser(user);
+
         return ResponseEntity.ok("注册成功");
     }
 
diff --git a/src/main/java/com/example/g8backend/dto/UserRegisterDTO.java b/src/main/java/com/example/g8backend/dto/UserRegisterDTO.java
new file mode 100644
index 0000000..2214438
--- /dev/null
+++ b/src/main/java/com/example/g8backend/dto/UserRegisterDTO.java
@@ -0,0 +1,12 @@
+package com.example.g8backend.dto;
+
+import lombok.Data;
+
+@Data
+public class UserRegisterDTO {
+    private String userName;
+    private String password;
+    private String email;
+    private String verificationCode;
+    private String invitationCode;
+}
diff --git a/src/main/java/com/example/g8backend/service/UserServiceImpl.java b/src/main/java/com/example/g8backend/service/UserServiceImpl.java
index a382a89..567c5f3 100644
--- a/src/main/java/com/example/g8backend/service/UserServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/UserServiceImpl.java
@@ -24,11 +24,5 @@
     public User getUserByEmail(String email) { return userMapper.getUserByEmail(email);}
 
     @Override
-    public void registerUser(User user) {
-        String password = user.getPassword(); // 获取密码
-        String encodedPassword = passwordEncoder.encode(password); // 加密密码
-        user.setPassword(encodedPassword);
-        System.out.println(user.getPassword());
-        userMapper.insert(user); // 调用 UserMapper 的 insert 方法
-    }
+    public void registerUser(User user) {userMapper.insert(user);}
 }
diff --git a/src/main/java/com/example/g8backend/util/mailUtil.java b/src/main/java/com/example/g8backend/util/mailUtil.java
new file mode 100644
index 0000000..5c8ad55
--- /dev/null
+++ b/src/main/java/com/example/g8backend/util/mailUtil.java
@@ -0,0 +1,24 @@
+package com.example.g8backend.util;
+
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.stereotype.Component;
+
+@Component
+public class mailUtil {
+
+    private final JavaMailSender javaMailSender;
+
+    public mailUtil(JavaMailSender javaMailSender) {
+        this.javaMailSender = javaMailSender;
+    }
+
+    public void sendMail(String to, String subject, String message) {
+        SimpleMailMessage mail = new SimpleMailMessage();
+        mail.setFrom("2038234690@qq.com");
+        mail.setTo(to);
+        mail.setSubject(subject);
+        mail.setText(message);
+        javaMailSender.send(mail);
+    }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index db1e7f3..7f85f87 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -6,5 +6,15 @@
 
 mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
 
-spring.data.redis.host = 172.23.31.113
-spring.data.redis.port = 6379
\ No newline at end of file
+spring.data.redis.host = 127.0.0.1
+spring.data.redis.port = 6379
+
+spring.mail.host=smtp.qq.com
+spring.mail.port=465
+spring.mail.username=2038234690@qq.com
+spring.mail.password=dixhyfaxjyauehaa
+spring.mail.default-encoding=utf-8
+spring.mail.protocol=smtp
+spring.mail.properties.mail.smtp.auth=true
+spring.mail.properties.mail.smtp.ssl.enable=true
+spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
