【发布时间】:2020-12-20 10:02:51
【问题描述】:
我正在尝试从 nodejs 通过 gmail 发送电子邮件,但我一直遇到此错误。
Error: Can't create new access token for user
at XOAuth2.generateToken(c: \apps\node\myapp\node_modules\nodemailer\lib\xoauth2\index.js: 184: 33)
at XOAuth2.getToken(c: \apps\node\myapp\node_modules\nodemailer\lib\xoauth2\index.js: 123: 18)
at SMTPConnection._handleXOauth2Token(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 1697: 27)
at SMTPConnection.login(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 540: 22)
at c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - transport\index.js: 374: 32
at SMTPConnection.<anonymous>(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 215: 17)
at Object.onceWrapper(events.js: 420: 28)
at SMTPConnection.emit(events.js: 314: 20)
at SMTPConnection._actionEHLO(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 1313: 14)
at SMTPConnection._processResponse(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 942: 20)
at SMTPConnection._onData(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 749: 14)
at TLSSocket.SMTPConnection._onSocketData(c: \apps\node\myapp\node_modules\nodemailer\lib\smtp - connection\index.js: 195: 44)
at TLSSocket.emit(events.js: 314: 20)
at addChunk(_stream_readable.js: 304: 12)
at readableAddChunk(_stream_readable.js: 280: 9)
at TLSSocket.Readable.push(_stream_readable.js: 219: 10) {
code: 'EAUTH',
command: 'AUTH XOAUTH2'
}
我已经设置了我的 G Suite 帐户,创建了一个服务帐户并为该项目启用了 Gmail API。我还为服务帐户启用了 G-Suite 域范围委派,并将客户端 ID 和适当的范围添加到我的 G Suite 帐户。
我下载了我的凭据文件并将其重命名为使用 .js,以便我可以将其作为 ES 模块导入。
import nodemailer from "nodemailer";
import * as key from "../credentials.js";
const SENDER_EMAIL = "support@domain.com";
const RECEIVER_EMAIL = "customer@gmail.com";
async function start() {
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
type: "OAuth2",
user: SENDER_EMAIL,
serviceClient: key.client_id,
privateKey: key.private_key,
},
});
try {
await transporter.verify();
await transporter.sendMail({
from: SENDER_EMAIL,
to: RECEIVER_EMAIL,
subject: "Hello Humans",
text: "The quick brown fox jumps over the lazy dog.",
});
} catch (err) {
console.error(err);
}
}
export default start;
现在,调用start() 错误并显示上述消息。我想不通。帮助。
【问题讨论】:
-
如果对
serviceClient和privateKey的值进行硬编码,是否会遇到同样的问题? -
有趣的是,不,我没有。当我对这些值进行硬编码时,错误就会消失。
-
似乎该错误与重命名凭据/检索它们的方式有关。
标签: node.js smtp gmail nodemailer google-workspace