Получить учетные данные OAuth для моей учетной записи GMail - PullRequest
1 голос
/ 28 марта 2019

Я использовал старый API JavaMail для отправки электронной почты из моего приложения Android с использованием аутентификации на основе пароля.Дело в том, что я использую свою собственную учетную запись GMail для отправки электронной почты (таким образом, сохраняя электронную почту / пароль в коде - я знаю, что это не очень хорошая идея)

new PasswordAuthentication(_user, _pass)

Я обновился до более новой версии JavaMail и хочу использовать OAuth2

implementation 'com.sun.mail:android-mail:1.6.2'
implementation 'com.sun.mail:android-activation:1.6.2'

Как создать учетные данные OAuth для своей учетной записи GMail и использовать их для отправки электронной почты?


РЕДАКТИРОВАТЬ:

Это то, что я пробовал до сих пор:

  1. Создан проект на Консоль Google .На экране «Учетные данные» создайте идентификатор клиента OAuth - выберите «Другие».Это дает мне Идентификатор клиента и Секрет клиента
  2. Используя oauth2.py , использовал Идентификатор клиента и Секрет клиента для генерации токена доступа и токена обновления (В производственном приложении я намереваюсьЖесткий код все 4: идентификатор клиента, секрет, доступ, обновить токен и продолжать использовать их «навсегда» для генерации новых токенов доступа)
  3. Проверено, что SMTP-аутентификация работает с использованием oauth2.py
  4. Изменен мой Java-код для отправки почты следующим образом:

    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.debug", "true");
    props.put("mail.smtp.port", 587);
    props.setProperty("mail.smtp.socketFactory.port", 587);
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.auth.mechanisms", "XOAUTH2");
    
    Session session = Session.getInstance(props);
    SMTPTransport transport = new SMTPTransport(session, null);
    transport.connect("smtp.gmail.com", _user, _accessToken);
    transport.sendMessage(msg, msg.getAllRecipients());
    

И теперь я получаю: java.net.UnknownHostException: mail.google.com Unknown SMTP host: smtp.gmail.com

У меня проблемы с поиском, как установитьТокен доступа по запросу.Вместо

transport.connect("smtp.gmail.com", _user, _accessToken);

Я также попытался

String auth = new String(BASE64EncoderStream.encode(String.format("user=%s\1auth=Bearer %s\1\1", _user, _accessToken).getBytes()));
transport.issueCommand("AUTH XOAUTH2 " + auth, 235);

Но та же ошибка.

...