Аутентификация с использованием Oauth2 для Gmail SMTPJAVA

Программисты JAVA общаются здесь
Anonymous
Аутентификация с использованием Oauth2 для Gmail SMTP

Сообщение Anonymous »

Поскольку Google собирается отказаться от поддержки аутентификации PLAIN в своем SMTP, я хочу перейти на аутентификацию на основе OAuth2.
Следуя этой документации, я начал с настройки учетной записи службы и создания ключи в формате json.
Затем попробовал пройти аутентификацию с помощью этого кода:

Код: Выделить всё

import com.google.auth.oauth2.ServiceAccountCredentials;
import com.sun.mail.smtp.SMTPTransport;
import jakarta.mail.Session;

import java.io.InputStream;
import java.util.Base64;
import java.util.Collections;
import java.util.Properties;

public class ForSendingEmailOauthAdapater {

void send() throws Exception {
InputStream secret = this.getClass().getClassLoader().getResourceAsStream("keys.json");
String email = "myemail@test.com"; // in my production code this set to the related service account email
GoogleCredentials credentials = ServiceAccountCredentials.fromStream(secret)
.createScoped(Collections.singletonList("https://mail.google.com/"));
credentials.refreshIfExpired();
String token = credentials
.getAccessToken()
.getTokenValue();

Properties props = new Properties();
props.put("mail.smtp", "true");
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth.mechanisms", "XOAUTH2");
props.put("mail.smtp.starttls.enable", "true");

Session session = Session.getInstance(props);
session.setDebug(true);

SMTPTransport transport = (SMTPTransport) session.getTransport("smtp");
transport.connect("smtp.gmail.com", 587, email, null);

String authString = "user=" + email + "\001auth=Bearer " + token + "\001\001";
String base64oauth2String = Base64.getEncoder().encodeToString(authString.getBytes());
transport.issueCommand("AUTH XOAUTH2 " + base64oauth2String, 235);
}
}
К сожалению, это не удается:

Код: Выделить всё

STARTTLS
220 2.0.0 Ready to start TLS
EHLO 
250-smtp.gmail.com at your service, [89.64.21.109]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
AUTH XOAUTH2 
555-5.5.2 Syntax error, goodbye. For more information, go to
555-5.5.2  https://support.google.com/a/answer/3221692 and review RFC 5321
555 5.5.2 specifications. a640c23a62f3a-a725f5e1b52sm262436666b.135 - gsmtp
Он выглядит почти так же, как здесь (см. раздел SMTP).
Ошибка 555-5.5.2 предполагает, что это неверный адрес электронной почты. (например, получателя), но происходит сбой при аутентификации, а не при отправке электронного письма.
Я также пробовал то же самое через завиток, но это не удалось с той же ошибкой:

Код: Выделить всё

  curl -sv --url 'smtp://smtp.gmail.com:587' \
--ssl-reqd \
--login-options 'AUTH=XOAUTH2' --oauth2-bearer  \
--user  \
--mail-from test@test.com --mail-rcpt test@test.com
Есть идеи, что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/786 ... gmail-smtp

Вернуться в «JAVA»