Как работать с паролем приложения Gmail с помощью Javax Mail - PullRequest
0 голосов
/ 23 мая 2019

Мое приложение Java для Windows должно отправлять электронную почту и позволять пользователю указывать учетные данные своей учетной записи электронной почты: хост, порт, имя пользователя, пароль.Это работает, когда я использую свои учетные данные для учетной записи в моей службе хостинга, но не так хорошо при использовании учетной записи Gmail, как мои потенциальные пользователи могут захотеть.Проблема в том, что Gmail настаивает на «пароле приложения».Итак, я следую инструкциям Google и создаю 16-значный пароль приложения, который, по словам Google, должен использоваться только один раз .Тем не менее, я считаю, что пароль приложения ДОЛЖЕН использоваться для последующих запусков.

Вот пример программы, которая демонстрирует проблему.Это не удастся, если я использую этот фактический пароль для учетной записи Gmail.Он будет работать после того, как я создал специальный пароль для приложения / устройства (16 символов) и использовал его в качестве пароля, как и должно быть.Но и после этого я должен использовать этот 16-символьный пароль.Чего мне не хватает?

public class SendEmailTLS {

// Пример 1 из https://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/ public static void main (String [] args) {

    final String username = "me123@gmail.com";
    final String password = "mypassword";

    Properties prop = new Properties();
    prop.put("mail.smtp.host", "smtp.gmail.com");
    prop.put("mail.smtp.port", "587");
    prop.put("mail.smtp.auth", "true");
    prop.put("mail.smtp.starttls.enable", "true"); //TLS

    Session session = Session.getInstance(prop,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("me123@gmail.com"));
        message.setRecipients(
                Message.RecipientType.TO,
                InternetAddress.parse("you456@hotmail.com")
        );
        message.setSubject("Testing Gmail TLS");
        message.setText("Dear sir,"
                + "\n\n I'm testing TLS,using port 587");

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

}

Я хочу добавить, что теперь я подозреваю, что то, что я вижу, - это способ, которым он должен работать.Я думал, что pw для 16-символьных приложений - это "Salt" -защита сервера Gmail.Теперь я прочитал, что это действительно просто альтернативный пароль для моей учетной записи Gmail.Если кто-то может подтвердить или опровергнуть эту новую точку зрения, я был бы признателен.

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