diff --git a/MyMathQuiz_UI.iml b/MyMathQuiz_UI.iml
index b826be9..5fd8b18 100644
--- a/MyMathQuiz_UI.iml
+++ b/MyMathQuiz_UI.iml
@@ -12,5 +12,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/jakarta.activation-2.0.1.jar b/lib/jakarta.activation-2.0.1.jar
new file mode 100644
index 0000000..521c7c4
Binary files /dev/null and b/lib/jakarta.activation-2.0.1.jar differ
diff --git a/lib/jakarta.mail-2.0.1.jar b/lib/jakarta.mail-2.0.1.jar
new file mode 100644
index 0000000..17e07cc
Binary files /dev/null and b/lib/jakarta.mail-2.0.1.jar differ
diff --git a/src/com/student/mathquiz/view/EmailService.java b/src/com/student/mathquiz/view/EmailService.java
new file mode 100644
index 0000000..86a0a41
--- /dev/null
+++ b/src/com/student/mathquiz/view/EmailService.java
@@ -0,0 +1,83 @@
+package com.student.mathquiz.view;
+
+import jakarta.mail.*;
+import jakarta.mail.internet.InternetAddress;
+import jakarta.mail.internet.MimeMessage;
+import java.util.Properties;
+import java.util.Random;
+
+public class EmailService {
+
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
+ // ★ 把这里换成你自己的发件人邮箱和授权码! ★
+ // ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
+ private static final String SENDER_EMAIL = "3048494657@qq.com";
+ private static final String SENDER_AUTHORIZATION_CODE = "ymnbezwjzrnfdgih";
+
+ /**
+ * 生成一个6位的随机验证码.
+ * @return 6位数字字符串
+ */
+ public static String generateVerificationCode() {
+ Random random = new Random();
+ int code = 100000 + random.nextInt(900000); // 保证是6位数
+ return String.valueOf(code);
+ }
+
+ /**
+ * 发送验证码邮件.
+ * @param recipientEmail 收件人邮箱
+ * @param code 要发送的验证码
+ * @return 发送成功返回 true, 否则返回 false
+ */
+ public static boolean sendVerificationEmail(String recipientEmail, String code) {
+ // 1. 配置邮件服务器属性
+ Properties props = new Properties();
+ props.put("mail.smtp.host", "smtp.qq.com"); // QQ邮箱的SMTP服务器地址
+ props.put("mail.smtp.port", "587"); // SMTP服务器端口 (使用TLS加密)
+ props.put("mail.smtp.auth", "true"); // 需要身份验证
+ props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
+
+ // 2. 创建认证器,用于登录邮箱
+ Authenticator authenticator = new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(SENDER_EMAIL, SENDER_AUTHORIZATION_CODE);
+ }
+ };
+
+ // 3. 获取邮件会话 Session
+ Session session = Session.getInstance(props, authenticator);
+
+ try {
+ // 4. 创建邮件消息 MimeMessage
+ MimeMessage message = new MimeMessage(session);
+ // 设置发件人
+ message.setFrom(new InternetAddress(SENDER_EMAIL));
+ // 设置收件人
+ message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail));
+ // 设置邮件主题
+ message.setSubject("【数学学习软件】您的注册验证码");
+ // 设置邮件正文内容
+ message.setText("尊敬的用户,您好!\n\n您的注册验证码是:" + code + "\n\n请在5分钟内完成注册。如果不是您本人操作,请忽略此邮件。\n\n(此为系统自动发送,请勿回复)");
+
+ // 5. 发送邮件!
+ Transport.send(message);
+
+ System.out.println("验证码邮件发送成功!");
+ return true;
+
+ } catch (MessagingException e) {
+ e.printStackTrace();
+ System.out.println("邮件发送失败!");
+ return false;
+ }
+ }
+
+ // 你可以写一个临时的 main 方法来测试它!
+ /* public static void main(String[] args) {
+ String code = generateVerificationCode();
+ // ★★★ 把这里换成你自己的另一个邮箱来接收测试邮件 ★★★
+ sendVerificationEmail("lyqqqq1214@163.com", code);
+ }*/
+}
diff --git a/src/com/student/mathquiz/view/RegisterView.fxml b/src/com/student/mathquiz/view/RegisterView.fxml
index d9554e1..12c1165 100644
--- a/src/com/student/mathquiz/view/RegisterView.fxml
+++ b/src/com/student/mathquiz/view/RegisterView.fxml
@@ -2,6 +2,7 @@
+
diff --git a/src/com/student/mathquiz/view/RegisterViewController.java b/src/com/student/mathquiz/view/RegisterViewController.java
index 272e352..c71aea8 100644
--- a/src/com/student/mathquiz/view/RegisterViewController.java
+++ b/src/com/student/mathquiz/view/RegisterViewController.java
@@ -2,10 +2,14 @@
package com.student.mathquiz.view;
import com.student.mathquiz.MainApp;
+import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
public class RegisterViewController {
+ public TextField codeField;
+ public TextField emailField;
@FXML private Label statusLabel;
private MainApp mainApp;
@@ -17,7 +21,27 @@ public class RegisterViewController {
@FXML
private void handleSendCode() {
// TODO: 在这里调用后端 userService.sendVerificationCode(...)
- statusLabel.setText("验证码已发送(伪)!");
+ String email = emailField.getText();
+
+ // TODO: 在这里先加一个邮箱格式校验
+
+ String code = EmailService.generateVerificationCode();
+
+ // ★★★ 在后台线程中发送邮件,防止界面卡死! ★★★
+ new Thread(() -> {
+ boolean success = EmailService.sendVerificationEmail(email, code);
+
+ // 在 JavaFX 主线程中更新界面
+ Platform.runLater(() -> {
+ if (success) {
+ statusLabel.setText("验证码已发送至您的邮箱,请查收!");
+ // TODO: 把 code 和 email 存起来,用于稍后的验证
+ } else {
+ statusLabel.setText("验证码发送失败,请检查邮箱地址或网络!");
+ }
+ });
+ }).start();
+
}
@FXML
@@ -32,3 +56,4 @@ public class RegisterViewController {
mainApp.showLoginView();
}
}
+// 在 RegisterViewController.java 里