2016-05-24 34 views
0

我必須在NodeJS中創建一個小程序,它將檢查用戶的帳戶是否有新郵件,並通過SMS(使用Twilio)通知他們是否有新郵件。不幸的是,我有麻煩讓獲取功能工作。如何使用NodeJS Gmail API獲取消息?

...我已經尋找了一會兒,所有的片段,我能找到有相同的片段作爲一個我下面張貼:

/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180 req = authClient.request(options, callback); ^

TypeError: authClient.request is not a function at createAPIRequest (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180:22) at Object.Gmail.self.users.messages.list (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/apis/gmail/v1.js:728:16) at CronJob. (/Users/mirtle/Documents/Universishit/smsmirtle/server.js:77:26) at CronJob.fireOnTick (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:392:22) at callbackWrapper [as _onTimeout] (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:435:9) at Timer.listOnTimeout (timers.js:92:15)

var gmail = google.gmail('v1'); 
//console.log("auth is " + util.inspect(auth, false, null)); 
// Line 77 under this comment 
gmail.users.messages.list({userId: 'me', auth: auth}, function(err, response) { 
     console.log("this is " + util.inspect(response, false, null) + "with error " + err); 
    }); 

當這個運行時,它崩潰

就像我說過的所有代碼片段,包括其他StackOverflow問題,都是這樣的,所以我不知道我在這裏做錯了什麼。

驗證令牌有效。如果您取消註釋我的第77行評論上方的評論,它會正確打印它。它還運行Google提供的示例來打印標籤並將其打印出來,因此該令牌有效且經過授權。

作爲一個好奇,如果我這樣調用該函數:

gmail.users.messages.list({}, function(err, response){...} 

不帶參數,它不會崩潰,但它的投訴沒有userId

我也可以在沒有第一個參數的情況下調用它,但它也抱怨沒有userId

我會感謝您可以給予的任何幫助。

+0

你有沒有想過爲什麼說authClient.request沒有定義? – ripit

回答

0

聽起來好像你傳遞了認證令牌,但你需要傳遞認證客戶端。

我講的第一個參數列表功能:「{用戶名:‘我’,權威性:AUTH}」

嘗試使該AUTH客戶端,你用得到令牌(例如,一個google.auth.JWT)。

1

代替直接使用包含access_token和其他數據的變量auth,應首先將其設置爲oauth憑證。我遇到同樣的問題。我做的是(看下面的代碼)

oauth2Client.setCredentials(auth); 
gmail.users.messages.list({userId: 'me', auth: oauth2Client}, function(err, response){ 

} 

然後,我成功地獲得所有的電子郵件和線程ID。希望這會幫助你。

+0

這裏就是銀子彈!!!從文檔'oauth2Client.credentials = token;'這樣做是行不通的。 –

相關問題