Вот разбивка настроек моего проекта:
Настройка проекта:
Версия Java: OpenJDK 21.0.4 LTS (Темурин)
Код: Выделить всё
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
- Сервлеты JSP и Java: используются для внешней и внутренней логики.
< li>Сервер: Tomcat 9, работающий в Windows, со следующими конфигурациями: - Путь JRE: C:\Program Files\Java\jdk1. 7.0_80\jre
- Путь JDK: C:\Program Files\Java\jdk1.7.0_80
- Путь Tomcat: C:\Program Files\ Apache Software Foundation\Tomcat 9.0
- Конфигурация Catalina: C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\Catalina
Основная проблема: система восстановления пароля использует отправку электронных писем через JavaMail, но я продолжаю получать ошибку подтверждения SSL всякий раз, когда система пытается отправить электронное письмо. Ниже приведено полное сообщение об ошибке:
Код: Выделить всё
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.HandshakeContext.(HandshakeContext.java:171)
at sun.security.ssl.ClientHandshakeContext.(ClientHandshakeContext.java:101)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:238)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:373)
at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
Используемые библиотеки (JAR):< /p>
- PostgreSQL JDBC (postgresql-42.2.29.jre7.jar)
- Bcrypt (jbcrypt-0.4.jar)< /li>
JavaMail API (mail-1.4.7.jar, smtp-1.6.2.jar, javax.activation.jar) - Политики безопасности (US_export_policy .jar, local_policy.jar)
Код: Выделить всё
// THIS IS THE MAIN CODE THAT IS SENDING EMAILS (RECOVERY_ACCOUNT.JSP)
// Database connection configurations
String url = "jdbc:postgresql://localhost:5432/bibliotech";
String user = "postgres";
String password = "admin";
String email = request.getParameter("email");
String passwordHash = null;
try {
// Connect to the database
Class.forName("org.postgresql.Driver");
Connection conn = DriverManager.getConnection(url, user, password);
enter code here
// Query to check if the email exists
String query = "SELECT password_hash FROM USERS WHERE email = ?";
PreparedStatement ps`enter code here`tmt = conn.prepareStatement(query);
pstmt.setString(1, email);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
passwordHash = rs.getString("password_hash"); // Retrieve the password hash
} else {
out.println("alert('Email not found!'); window.location.href = 'recovery.jsp';");
}
rs.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
// If the password hash was found, send an email to the user
if (passwordHash != null) {
// JavaMail configurations
String host = "smtp.gmail.com"; // Using Gmail as an example
String from = "bibliotechproject@gmail.com"; // Your email
String appPassword = "iodz fnwh idsg wmpo"; // Use a Gmail app password
String to = email;
String subject = "Password Recovery - Bibliotech";
// Email content with HTML
String messageText =
""
+ ""
+ "
[img]https://iili.io/dPzedMX.png[/img]
"
+ ""
+ "Account Recovery"
+ "
Hello,
"
+ "
We received a request to recover the password for your account. Here are your login details:
"
+ "
Email: " + email + "
"
+ "
Password: " + passwordHash + "
"
+ "
If you did not make this request, please ignore this email.
"
+ "
Sincerely, https://prod.liveshare.vsengsaas.visualstudio.com/join?01A2BDE3A14A18BC1D1E0892E16E13D31189
"
+ "
Support Team - Bibliotech
"
+ ""
+ ""
+ "";
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", appPassword);
props.put("mail.smtp.port", "587");
props.put("mail.debug", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.auth", "true");
Session mailSession = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(mailSession);
try {
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setContent(messageText, "text/html");
Transport transport = mailSession.getTransport("smtp");
transport.connect(host, from, appPassword);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
response.sendRedirect("send_success.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}
- US_export_policy.jar
- bcrypt-0.4.1.jar
- bytes-0.4.6.jar
- javax.activation.jar
- jbcrypt-0.4.jar
- local_policy.jar
- mail-1.4.7.jar
- postgresql-42.2.29.jre7.jar
- smtp-1.6.2.jar
Убедился, что на сервере и в моей конфигурации JavaMail включены правильные протоколы SSL.
Пытался обновить библиотеку JavaMail, чтобы устранить потенциальные несоответствия протоколов SSL.
Просмотрел порядок файлов JAR в папке lib, чтобы проверить наличие конфликтующих библиотек.
Оставшиеся вопросы:
Связана ли ошибка установления связи SSL с моей версией Java 21 , или это неправильная конфигурация сервера JavaMail или Tomcat?
Может ли проблема быть связана с более старыми версиями JavaMail или другими файлами JAR, вызывающими конфликты с протоколами SSL?
Кто-нибудь сталкивался с подобными проблемами при использовании JavaMail в качестве пароля восстановление в проекте JSP? Как вы решили проблему с подтверждением SSL?
Я был бы признателен за любые советы о том, как решить эту проблему, особенно относительно конфигурации SSL с JavaMail. Если речь идет о версиях JAR, каковы будут правильные версии и порядок этих библиотек?
Заранее спасибо за любую информацию!
Один день в учебном заведении, где я веду этот проект, отправка писем просто работала, мне не нужно было ничего менять, я просто пришел, включил компьютер и все заработало, я считал, что на этой машине установлена Java-конфигурация, но на днях, когда я снова тестировал на том же компьютере, он снова выдал мне ошибку при отправке электронных писем.
Подробнее здесь: https://stackoverflow.com/questions/790 ... jsp-projec
Мобильная версия