如何使用NodeJS Gmail API获取邮件?

时间:2016-05-24 02:28:43

标签: javascript node.js google-api-nodejs-client

我必须在NodeJS中创建一个小程序,它将检查用户的帐户是否有新邮件,并通过短信(使用Twilio)通知他们是否有新邮件。不幸的是,我遇到了让fetch功能起作用的麻烦。

我搜索了一段时间,我找到的所有代码段都与我在下面发布的代码段相同:

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

当它运行时,它会崩溃:

  

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

     

TypeError:authClient.request不是函数       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)       在CronJob。 (/Users/mirtle/Documents/Universishit/smsmirtle/server.js:77:26)       在CronJob.fireOnTick(/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:392:22)       在callbackWrapper [as _onTimeout](/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:435:9)       在Timer.listOnTimeout(timers.js:92:15)

就像我说的那样,我能找到的所有片段,包括其他StackOverflow问题,都是这样的,所以我不知道我在这里做错了什么。

身份验证令牌有效。如果您取消注释我的第77行注释上方的注释,它会正确打印它。它还运行Google提供的示例来打印标签并打印,因此令牌有效且经过授权。

作为一个好奇心,如果我这样称呼函数:

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

没有参数,它不会崩溃,但它抱怨没有userId

我也可以在没有第一个参数的情况下调用它,但它也抱怨没有userId

我将非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

您应该首先将其设置为oauth凭据,而不是直接使用包含//main.ts import func = require('./commonjs-export-function'); 和其他数据的变量auth。我遇到了同样的问题。我做的是(见下面的代码)

access_token

然后我成功获取所有电子邮件和线程ID。希望这会对你有所帮助。

答案 1 :(得分:0)

听起来你传递的是auth令牌,但是你需要传递auth客户端。

我在谈论列表函数的第一个参数:'{userId:'me',auth:auth}'

尝试制作用于获取令牌的auth客户端(例如google.auth.JWT)。