Тайм-аут при попытке отправить письмо - PullRequest
0 голосов
/ 29 марта 2019

Таким образом, у меня возникает проблема с тайм-аутом, когда я пытаюсь отправлять электронные письма, используя самые последние 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...