Получить учетные данные OAuth для моей собственной учетной записи GMail

#android #jakarta-mail

#Android #джакарта-почта

Вопрос:

Я использовал более старый JavaMail API для отправки электронной почты из моего приложения для 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=%s1auth=Bearer %s11", _user, _accessToken).getBytes()));
transport.issueCommand("AUTH XOAUTH2 "   auth, 235);
  

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

Комментарии:

1. Обратитесь за справкой к странице JavaMail для Android , там содержатся ссылки на документы, которые вам нужно прочитать.

2. Я уже просмотрел эту документацию — не удалось найти способ сгенерировать токен доступа для моей собственной учетной записи GMail.

3. У меня это сработало, когда я попробовал это много месяцев назад. Что именно вы пробовали? В Google есть веб-страница для управления всеми вашими учетными данными OAuth, вы нашли ее?

4. @BillShannon: Чтобы уточнить, вы пытались войти в систему, используя свою собственную учетную запись GMail, или разрешить пользователям входить в систему, используя «свои» учетные записи для отправки почты? Я могу легко найти документацию для последнего. Если вы можете, пожалуйста, поделитесь ссылкой на веб-страницу, которую вы упоминаете?

5. Страница JavaMail Android ссылается на страницу JavaMail OAuth2 , которая ссылается на инструкции Google OAuth2 и консоль разработчиков Google . На этой странице выберите Учетные данные, и вы сможете управлять своими учетными данными OAuth2, которые разрешают доступ к вашей учетной записи. Поскольку вы прочитали все эти страницы и уже пробовали это, расскажите нам более точно, что вы сделали и что получилось.