带环回的Gmail的Nodemailer错误 – 对象#<对象>没有方法'getToken'

我正在学习Loopback,并决定发送一些电子邮件。 我想使用Gmail帐户。 我创build了远程方法和configuration数据源。 以下是它的外观:

"myEmailDataSource": { "name": "myEmailDataSource", "connector": "mail", "transports": [ { "type": "smtp", "host": "smtp.gmail.com", "auth": { "xoauth2": { "user": "myMail@gmail.com", "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) 

这是为什么?

我有完全相同的问题。 你有没有find解决办法? 作为一个解决方法,我已经做了以下。

  1. 在服务器\ boot中创build一个启动脚本
  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模块。

应该有更好的方法来处理这个问题。 但到目前为止我还没有find它,所以使用这种解决方法。