试图使用nodemailer使用Gmail发送电子邮件,并收到错误:“无法为用户创build新的访问令牌”

我目前有一个设置,使用gmamail中的nodemailer发送邮件。 当我手动创build一个访问令牌(它只持续〜1小时)时,它工作正常。 但是,过了一小时后,我得到了下面的错误。 请注意,在那个小时内,我能够发送电子邮件就好,一切正常。

{ Error: Can't create new access token for user at XOAuth2.generateToken (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\xoauth2\index.js:162:33) at XOAuth2.getToken (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\xoauth2\index.js:111:18) at SMTPConnection._handleXOauth2Token (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\smtp-connection\index.js:1421:27) at Immediate.setImmediate (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\smtp-connection\index.js:1239:45) at runCallback (timers.js:666:20) at tryOnImmediate (timers.js:639:5) at processImmediate [as _immediateCallback] (timers.js:611:5) code: 'EAUTH', command: 'AUTH XOAUTH2' } 

我用来发送电子邮件的代码是:

 var emailMsg = `Name: ${name}\nEmail: ${email}\n\nMessage:\n${msg}`; var transporter = nodemailer.createTransport({ service: 'gmail', auth: { type: 'OAuth2', user: process.env.GMAIL_ACC, clientId: process.env.GMAIL_CLIENTID, clientSecret: process.env.GMAIL_CLIENTSECRET, refreshToken: process.env.GMAIL_RFRESHTOKEN, accessToken: process.env.GMAIL_ACCESSTOKEN } }); var mailOptions = { from: process.env.GMAIL_ACC, to: process.env.GMAIL_ACC, subject: `Contact Form - ${name}`, text: emailMsg }; transporter.sendMail(mailOptions, function(mailErr, mailRes) { if(mailErr) { //Mail was unable to send sendResponse(418, false, [{'email': 'Server was unable to send email.'}]); console.log('Mail Error:\n ', mailErr); } else { //Everything worked correctly. (As far as responses go) sendResponse(200, true); } } ); 

事情我已经尝试: – 允许不太安全的应用程序(似乎没有任何影响) – 禁用防病毒(这原本是一个问题的东西无关) – 创build一个新的应用程序和一套令牌(这已影响了0)

任何帮助将不胜感激,谢谢!

process.env.GMAIL_RFRESHTOKEN – 这是否应该是GMAIL_REFRESH_TOKEN ? 仔细查看库的源代码,就会发现这个错误会直接从GMail API中抛出,因为库本身不会构造这个错误。 这将支持刷新标记为undefined / null的理论。