Таким образом, у меня возникает проблема с тайм-аутом, когда я пытаюсь отправлять электронные письма, используя самые последние API Java-почты. адрес электронной почты действителен, как и пароль. В качестве учетной записи отправителя я использую электронную почту Gmail и разрешил доступ к менее защищенным учетным записям. проблема в строке 24, где написано tr.send(message)
. Я не получаю ошибку. программа просто перестает отвечать на запросы. Сообщение даже не попадает в мою папку. Я думаю, что это может быть связано с оператором import javax.activation.*;
, который, по словам Intellij, является неиспользованным оператором импорта. Я добавил его в библиотеку моего проекта, когда добавил API Java-почты. Нужно ли добавлять его в мой файл pom.xml?
Я пытался прочитать из этого ответа Отправка электронной почты с вложением с помощью API javamail
и посмотрел это видео https://www.youtube.com/watch?v=A7HAB5whD6I
Вот откуда я получил основную часть своей программы.
public class AutomatedEmails {
@FXML
private TextField email;
@FXML
private TextField name;
private String host = "smtp.gmail.com";
private String user = "emailaddress@gmail.com";
private String emailPassword = "password";
private String TO = "";
private String FROM = "emailaddress@gmail.com";
private String subject = "hello";
private String messageText = "hello";
Properties props = System.getProperties();
public AutomatedEmails() throws IOException, MessagingException {
}
public void sendWelcomeEmail(RegisterController registerController) throws MessagingException {
props.put("mail.smtp.auth", true);
props.put("mail.smtp.starttls.enable", true);
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
TO = registerController.getEmail();
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(FROM, emailPassword);
}
});
Message message = prepareMessage(session, FROM, TO);
System.out.println("working still");
// this prints
Transport tr = session.getTransport("smtps");
tr.connect(host, FROM, emailPassword);
Transport.send(message);
tr.close();
System.out.println("message sent successfully");
// this doesn't print
}
public Message prepareMessage(Session session, String FROM, String TO){
try{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(FROM));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
message.setSubject(subject);
((MimeMessage) message).setText(messageText);
return message;
} catch (Exception e){
Logger.getLogger(AutomatedEmails.class.getName()).log(Level.SEVERE, null, e);
}
return null;
}
}
Идея состоит в том, что электронное письмо будет отправлено зарегистрированному пользователю. Вместо этого есть просто тайм-аут без отправки электронной почты. Мне интересно, связано ли это с неиспользованным импортом. Нужно ли что-то добавить в мой файл pom.xml? Или измени мой код. Использование Mac