|
|
package com.mathlearning.util;
|
|
|
|
|
|
import javax.mail.*;
|
|
|
import javax.mail.internet.*;
|
|
|
import javax.swing.JOptionPane;
|
|
|
import java.util.Properties;
|
|
|
import java.util.Random;
|
|
|
|
|
|
public class EmailUtil {
|
|
|
private static final Random random = new Random();
|
|
|
|
|
|
|
|
|
public static String sendVerificationCode(String toEmail) {
|
|
|
if (!EmailConfig.isConfigured()) {
|
|
|
JOptionPane.showMessageDialog(null,
|
|
|
"邮箱配置未完成!\n请修改 email_config.properties 文件,配置您的邮箱信息。",
|
|
|
"配置错误",
|
|
|
JOptionPane.ERROR_MESSAGE);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
String verificationCode = generateVerificationCode();
|
|
|
|
|
|
try {
|
|
|
boolean sendSuccess = sendEmail(toEmail, verificationCode);
|
|
|
|
|
|
if (sendSuccess) {
|
|
|
JOptionPane.showMessageDialog(
|
|
|
null,
|
|
|
"验证码已发送到您的邮箱!\n\n" +
|
|
|
"收件邮箱: " + toEmail + "\n" +
|
|
|
"请查看您的邮箱并输入验证码。",
|
|
|
"验证码发送成功",
|
|
|
JOptionPane.INFORMATION_MESSAGE
|
|
|
);
|
|
|
return verificationCode;
|
|
|
} else {
|
|
|
JOptionPane.showMessageDialog(null,
|
|
|
"验证码发送失败,请检查邮箱地址是否正确或稍后重试",
|
|
|
"发送失败",
|
|
|
JOptionPane.ERROR_MESSAGE);
|
|
|
return null;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
JOptionPane.showMessageDialog(null,
|
|
|
"发送验证码时发生错误: " + e.getMessage(),
|
|
|
"错误",
|
|
|
JOptionPane.ERROR_MESSAGE);
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
private static boolean sendEmail(String toEmail, String verificationCode) {
|
|
|
Properties props = new Properties();
|
|
|
props.put("mail.smtp.host", EmailConfig.getSmtpHost());
|
|
|
props.put("mail.smtp.port", EmailConfig.getSmtpPort());
|
|
|
props.put("mail.smtp.auth", "true");
|
|
|
|
|
|
if (EmailConfig.isSslEnabled()) {
|
|
|
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
|
|
|
props.put("mail.smtp.socketFactory.port", EmailConfig.getSmtpPort());
|
|
|
}
|
|
|
|
|
|
Session session = Session.getInstance(props, new Authenticator() {
|
|
|
@Override
|
|
|
protected PasswordAuthentication getPasswordAuthentication() {
|
|
|
return new PasswordAuthentication(EmailConfig.getFrom(), EmailConfig.getPassword());
|
|
|
}
|
|
|
});
|
|
|
|
|
|
try {
|
|
|
Message message = new MimeMessage(session);
|
|
|
message.setFrom(new InternetAddress(EmailConfig.getFrom()));
|
|
|
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
|
|
|
message.setSubject("数学学习软件 - 邮箱验证码");
|
|
|
|
|
|
String emailContent = "尊敬的用户:\n\n" +
|
|
|
"您正在注册数学学习软件,验证码为:" + verificationCode + "\n\n" +
|
|
|
"验证码有效期为10分钟,请尽快完成注册。\n\n" +
|
|
|
"如果不是您本人操作,请忽略此邮件。\n\n" +
|
|
|
"数学学习软件团队";
|
|
|
|
|
|
message.setText(emailContent);
|
|
|
|
|
|
Transport.send(message);
|
|
|
System.out.println("验证码邮件已发送到: " + toEmail);
|
|
|
return true;
|
|
|
|
|
|
} catch (MessagingException e) {
|
|
|
System.err.println("发送邮件失败: " + e.getMessage());
|
|
|
e.printStackTrace();
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
private static String generateVerificationCode() {
|
|
|
return String.format("%06d", random.nextInt(1000000));
|
|
|
}
|
|
|
|
|
|
|
|
|
public static boolean isValidEmail(String email) {
|
|
|
if (email == null || email.trim().isEmpty()) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$";
|
|
|
return email.matches(emailRegex);
|
|
|
}
|
|
|
|
|
|
|
|
|
public static String getEmailRequirements() {
|
|
|
return "请输入有效的邮箱地址,例如:username@example.com";
|
|
|
}
|
|
|
} |