2017-03-10 53 views
0

我想使用Nodemailer 3,GMail API惠普OAuth2認證使一個簡單的郵件發件人。Nodemailer惠通GMail SMTP OAuth2認證讓我'無效的狀態代碼401'

這裏是我的腳本:

var serverConfig = { 
    gmail: { 
     client_user : '[email protected]', 
     client_id : '349...myClientId', 
     secret : 'mysecret..123jd123', 
     refresh_token : 'x/xxxxxxxxxxxxxx-reZuEMeSuJaSERmCVY', 
     access_token : 'xxxxxxxxxxxxxxxxx', 
     expires: '3599' 
    } 
} 

// 3LO authentication https://nodemailer.com/smtp/oauth2/#example-3 
var transporter = nodemailer.createTransport({ 
    service: 'gmail', 
    auth: { 
    type: 'OAuth2', 
    user: serverConfig.gmail.client_user, 
    clientId: serverConfig.gmail.client_id, 
    clientSecret: serverConfig.gmail.secret, 
    refreshToken: serverConfig.gmail.refresh_token 
    }, 
}); 

module.exports = { 
    "send": function(_from,_to,_subject,_html,_text){ 
     // setup email data with unicode symbols 
     var mailOptions = { 
      from: _from, 
      to: _to, // list of receivers 
      subject: _subject, // Subject line 
      html: _html, // html body 
      text: _text // plain text body 
     }; 

     transporter.sendMail(mailOptions, function(error, info){ 
      if (error) { 
       return console.log(error); 
      } 
      console.log('Message ' + info.messageId + ' sent: %s' + info.response); 
     }) 
    } 


} 

當我迫使auth對象的的access_token,電子郵件是沒有任何問題發送。但是,當我不指定access_token,只有德refresh_token,我得到這個錯誤:

{ Error: Invalid status code 401 
    at ClientRequest.req.on.res (/myproject/node_modules/nodemailer/lib/fetch/index.js:193:23) 
    at emitOne (events.js:96:13) 
    at ClientRequest.emit (events.js:188:7) 
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:474:21) 
    at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23) 
    at TLSSocket.socketOnData (_http_client.js:363:20) 
    at emitOne (events.js:96:13) 
    at TLSSocket.emit (events.js:188:7) 
    at readableAddChunk (_stream_readable.js:176:18) 
    at TLSSocket.Readable.push (_stream_readable.js:134:10) 
    type: 'FETCH', 
    sourceUrl: 'https://accounts.google.com/o/oauth2/token', 
    code: 'EAUTH', 
    command: 'AUTH XOAUTH2' } 
+0

我做了一個[在Stack Overflowespañol中的這個問題的副本](http://es.stackoverflow.com/questions/54470/nodemailer-con-gmail-smtp-y-autenticaci %C3%B3n-oauth2-me-devuelve-invalid-status-cod?noredirect = 1#comment97072_54470) –

+0

你知道嗎?有同樣的問題。我也不知道如何獲得'refreshToken'。這不是在迴應中發送的嗎? – ironicaldiction

+0

不是。我決定使用簡單的SMPT認證。 –

回答

0

也許爲時已晚,但這裏只是回答櫃面有人遇到同樣的問題。當refreshToken被重置時,我的問題糾正了。 This article給出了整個過程的偉大指示

+0

文章逝去:( – Kirby