我正在学习回送,因此决定发送一些电子邮件。我想使用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)


这是为什么?

最佳答案

我有完全相同的问题。您找到任何解决方案吗?
作为解决方法,我已经完成了以下工作。


在server \ boot中创建启动脚本
在脚本中编写了以下代码



  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模块。

应该有更好的方法来处理此问题。但是到目前为止,我还没有找到它,所以请使用此替代方法。

10-08 09:09