Я использовал старый 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 и использовать их для отправки электронной почты?
РЕДАКТИРОВАТЬ:
Это то, что я пробовал до сих пор:
- Создан проект на Консоль Google .На экране «Учетные данные» создайте идентификатор клиента OAuth - выберите «Другие».Это дает мне Идентификатор клиента и Секрет клиента
- Используя oauth2.py , использовал Идентификатор клиента и Секрет клиента для генерации токена доступа и токена обновления (В производственном приложении я намереваюсьЖесткий код все 4: идентификатор клиента, секрет, доступ, обновить токен и продолжать использовать их «навсегда» для генерации новых токенов доступа)
- Проверено, что SMTP-аутентификация работает с использованием oauth2.py
Изменен мой 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);
Но та же ошибка.