OAuth2 выдает ошибку «Имя пользователя и пароль не приняты» при попытке отправить электронное письмо с помощью Gmail + Nodejs + Nodemailer
Код - Nodejs - Nodemailer и xoauth2
var nodemailer = require("nodemailer");
var generator = require('xoauth2').createXOAuth2Generator({
user: "", // Your gmail address.
clientId: "",
clientSecret: "",
refreshToken: "",
});
// listen for token updates
// you probably want to store these to a db
generator.on('token', function(token){
console.log('New token for %s: %s', token.user, token.accessToken);
});
// login
var smtpTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
xoauth2: generator
}
});
var mailOptions = {
to: "",
subject: 'Hello ', // Subject line
text: 'Hello world ', // plaintext body
html: '<b>Hello world </b>' // html body
};
smtpTransport.sendMail(mailOptions, function(error, info) {
if (error) {
console.log(error);
} else {
console.log('Message sent: ' + info.response);
}
smtpTransport.close();
});
вопросы:
Я использовал площадку Google OAuth2 для создания токенов, https://developers.google.com/oauthplayground/
Он пытается получить действительный токен доступа в порядке, используя refreshToken (т.е. он печатает новый токен доступа на экране). Ошибок нет, пока он не попытается отправить электронное письмо.
Я добавил необязательный токен доступа: но получил ту же ошибку. («Имя пользователя и пароль не приняты»)
Я не уверен на 100% насчет «имени пользователя», в документации говорится, что ему нужен «пользовательский» адрес электронной почты - я предполагаю, что адрес электронной почты учетной записи, созданной для токена, не на 100% ясен. Я пробовал несколько вещей, но ничего не помогло.
Я просмотрел параметры в учетных записях Gmail, но не нашел ничего неправильного.
Кроме того, когда я сделал это с Java, ему понадобился идентификатор пользователя google, а не адрес электронной почты, не знаю, почему он использует адрес электронной почты, а Java использует UserId.