Gmail API 'invalid username or password' 在 nodemailer 中使用 OAuth2 时
Gmail API 'invalid username or password' when using OAuth2 in nodemailer
我正在尝试将 gmail smtp 与最新版本的 nodemailer 一起使用。
我已经完成了描述的步骤 here。发送邮件时,我仍然收到以下错误消息:
错误:登录无效:535-5.7.8 用户名和密码未被接受
这很奇怪,因为我从未尝试使用 password/username 登录,但我改用 OAuth2:
transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'hello@company.com',
clientId: '<clientId>.apps.googleusercontent.com',
clientSecret: '<clientSecret>',
accessToken: '<accessToken>',
refreshToken: '<refreshToken>',
}
});
transporter.sendMail({
from: from,
to: to,
subject: subject,
text: message,
html: htmlMessage
}, function (err, data) {
if (err) {
console.log(err);
console.log("======");
console.log(subject);
console.log(message);
} else {
console.log('Email sent:');
console.log(data);
}
});
有人知道我错过了什么吗?我尝试执行所有这些步骤来生成这些令牌 3 次,所以我很确定所有凭据都已正确填写。
提前致谢
基于此post,尝试如下所示配置您的传输器:
const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: process.env.MAIL_USER,
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
refreshToken: process.env.GOOGLE_CLIENT_REFRESH_TOKEN
}
});
If you're unsure how to generate the id, secret and token, follow the steps here https://medium.com/@pandeysoni/nodemailer-service-in-node-js-using-smtp-and-xoauth2-7c638a39a37e
您也可以查看此 link 以了解您遇到该错误的可能原因。
就我而言,将用户设置为仅我的用户名似乎神奇地起作用了!
const transport = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'test', //Excluding the part after '@' Example: test@gmail.com to only 'test'
clientId: CLIENT_ID,
clientSecret: CLEINT_SECRET,
refreshToken: REFRESH_TOKEN,
accessToken: accessToken,
},
});
我正在尝试将 gmail smtp 与最新版本的 nodemailer 一起使用。 我已经完成了描述的步骤 here。发送邮件时,我仍然收到以下错误消息:
错误:登录无效:535-5.7.8 用户名和密码未被接受
这很奇怪,因为我从未尝试使用 password/username 登录,但我改用 OAuth2:
transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'hello@company.com',
clientId: '<clientId>.apps.googleusercontent.com',
clientSecret: '<clientSecret>',
accessToken: '<accessToken>',
refreshToken: '<refreshToken>',
}
});
transporter.sendMail({
from: from,
to: to,
subject: subject,
text: message,
html: htmlMessage
}, function (err, data) {
if (err) {
console.log(err);
console.log("======");
console.log(subject);
console.log(message);
} else {
console.log('Email sent:');
console.log(data);
}
});
有人知道我错过了什么吗?我尝试执行所有这些步骤来生成这些令牌 3 次,所以我很确定所有凭据都已正确填写。
提前致谢
基于此post,尝试如下所示配置您的传输器:
const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { type: 'OAuth2', user: process.env.MAIL_USER, clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, refreshToken: process.env.GOOGLE_CLIENT_REFRESH_TOKEN } });
If you're unsure how to generate the id, secret and token, follow the steps here https://medium.com/@pandeysoni/nodemailer-service-in-node-js-using-smtp-and-xoauth2-7c638a39a37e
您也可以查看此 link 以了解您遇到该错误的可能原因。
就我而言,将用户设置为仅我的用户名似乎神奇地起作用了!
const transport = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'test', //Excluding the part after '@' Example: test@gmail.com to only 'test'
clientId: CLIENT_ID,
clientSecret: CLEINT_SECRET,
refreshToken: REFRESH_TOKEN,
accessToken: accessToken,
},
});