Мы разрабатываем простое веб-приложение на JSF , в которое необходимо включить модуль «забыть пароль». Для наглядности и простоты я попробовал следующий код в сервлете Java. Он может отправлять почту в Gmail и работает нормально, никаких проблем нет. Ниже приведен полный код сервлета.
public class MailClient extends HttpServlet {
private class SMTPAuthenticator extends Authenticator {
private PasswordAuthentication authentication;
public SMTPAuthenticator(String login, String password) {
authentication = new PasswordAuthentication(login, password);
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return authentication;
}
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String from = "bhaveshp1980@gmail.com";
String to = "bhaveshp1980@gmail.com";
String subject = "A mail from Java.";
String message = "My first mail from Java.";
String login = "bhaveshp1980@gmail.com";
String password = "password";
Properties props = new Properties();
props.setProperty("mail.host", "smtp.gmail.com");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.starttls.enable", "true");
Authenticator auth = new SMTPAuthenticator(login, password);
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
try {
msg.setText(message);
msg.setSubject(subject);
msg.setFrom(new InternetAddress(from));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
Transport.send(msg);
} catch (MessagingException ex) {
Logger.getLogger(MailClient.class.getName()).
log(Level.SEVERE, null, ex);
}
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Теперь вопрос first заключается в том, что как только пользователь вводит свой действующий адрес электронной почты, код подтверждения должен быть отправлен на определенный сервер сообщений (Gmail, Yahoo и т. Д.) без запрашивая у пользователя его пароль (что не относится к приведенному выше коду) , что важно при реализации модуля «забыть пароль» в веб-приложении.
Второй вопрос заключается в том, что приведенный выше код предназначен для отправки почты только в Gmail. Если я хочу отправить письмо на другой сервер сообщений, скажем, Yahoo, заявление
props.setProperty("mail.host", "smtp.gmail.com");
необходимо изменить на
props.setProperty("mail.host", "smtp.mail.yahoo.com");
[и порт № тоже, в отношении других] означает, что определенный сервер сообщений, на который должно быть отправлено сообщение, должен быть правильно распознан. Какой лучший способ сделать это? Как лучше всего преодолеть эти проблемы, пожалуйста.