2017-08-13 61 views
1

我目前有一個安裝程序可以使用gmail中的nodemailer發送電子郵件。當我手動創建一個訪問令牌(它只持續〜1小時)時,它工作正常。然而,在那個小時過後,我得到了下面的錯誤。請注意,在那個小時內,我可以發送電子郵件,並且一切正常。試圖使用nodemailer使用Gmail發送電子郵件,並收到錯誤:「無法爲用戶創建新的訪問令牌」

{ 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); 
     } 
    } 
); 

事情我已經嘗試: - 允許不夠安全的應用(似乎不具有任何影響) - 禁用防病毒軟件(這原本是一個無關的問題) - 創建一個新的應用程序和一套令牌(這有0影響)

任何幫助,將不勝感激,謝謝!

回答

0

process.env.GMAIL_RFRESHTOKEN - 應該是GMAIL_REFRESH_TOKEN?通過庫的源代碼,看起來這個錯誤會從GMail API直接拋出,因爲庫永遠不會自己構造這個錯誤。這將支持刷新標記爲undefined/null的理論。

+0

是的,謝謝!似乎我沒有像我以前那樣複製和粘貼。 –

相關問題