Nodemailer 与 Gmail 出现环回错误 - 对象 #<Object> 没有方法“getToken”

问题描述 投票:0回答:1

我正在学习 Loopback,我决定发送一些电子邮件。我想使用 Gmail 帐户。 我创建了远程方法并配置了数据源。这是它的样子:

"myEmailDataSource": {
"name": "myEmailDataSource",
"connector": "mail",
"transports": [
  {
    "type": "smtp",
    "host": "smtp.gmail.com",
    "auth": {
      "xoauth2": {
        "user": "[email protected]",
        "clientId": "myClientId.apps.googleusercontent.com",
        "clientSecret": "mySecret",
        "refreshToken": "myToken"
      }
    }
  }
]

}

但是当我想发送电子邮件时,它会抛出此错误:

TypeError: Object #<Object> has no method 'getToken'
at SMTPConnection._handleXOauth2Token (/home/arth95/Projects/firstCMS/node_modules/loopback/node_modules/nodemailer/node_modules/nodemailer-smtp-transport/node_modules/smtp-connection/src/smtp-connection.js:961:67)
at SMTPConnection.login (/home/arth95/Projects/firstCMS/node_modules/loopback/node_modules/nodemailer/node_modules/nodemailer-smtp-transport/node_modules/smtp-connection/src/smtp-connection.js:233:18)
at SMTPTransport.<anonymous> (/home/arth95/Projects/firstCMS/node_modules/loopback/node_modules/nodemailer/node_modules/nodemailer-smtp-transport/src/smtp-transport.js:96:24)
at SMTPConnection.g (events.js:180:16)
at SMTPConnection.EventEmitter.emit (events.js:92:17)
at SMTPConnection._actionEHLO (/home/arth95/Projects/firstCMS/node_modules/loopback/node_modules/nodemailer/node_modules/nodemailer-smtp-transport/node_modules/smtp-connection/src/smtp-connection.js:692:10)
at SMTPConnection._processResponse (/home/arth95/Projects/firstCMS/node_modules/loopback/node_modules/nodemailer/node_modules/nodemailer-smtp-transport/node_modules/smtp-connection/src/smtp-connection.js:511:16)
at SMTPConnection._onData (/home/arth95/Projects/firstCMS/node_modules/loopback/node_modules/nodemailer/node_modules/nodemailer-smtp-transport/node_modules/smtp-connection/src/smtp-connection.js:357:10)
at CleartextStream.EventEmitter.emit (events.js:95:17)
at CleartextStream.<anonymous> (_stream_readable.js:746:14)

这是为什么?

node.js gmail nodemailer loopback
1个回答
1
投票

作为解决方法,我已经完成了以下操作。

  1. 在服务器oot中创建启动脚本
  2. 在脚本中编写以下代码

var email = app.models.Email;

var auth = email.dataSource.connector.transports[0].transporter.options.auth;

auth.xoauth2 = require('xoauth2').createXOAuth2Generator(auth.xoauth2);

这会将您在数据源中定义的 xoauth2 对象转换为 Nodemailer 所需的 XOAuth2Generator 对象。

您需要安装xoauth2模块。

© www.soinside.com 2019 - 2024. All rights reserved.