【问题标题】:How do I fetch messages with the NodeJS Gmail API?如何使用 NodeJS Gmail API 获取消息?
【发布时间】:2016-09-21 01:38:57
【问题描述】:

我必须在 NodeJS 中创建一个小程序,该程序将检查用户的帐户是否有新消息,并在他们有新邮件时通过 SMS(使用 Twilio)通知他们。不幸的是,我无法让提取功能正常工作。

我已经搜索了一段时间,我能找到的所有 sn-p 都与我在下面发布的 sn-p 相同:

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(选项,回调); ^

TypeError: authClient.request 不是函数 在 createAPIRequest (/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180:22) 在 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)

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

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

出于好奇,如果我这样调用函数:

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

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

我也可以不带第一个参数调用它,但它也抱怨没有userId

如果您能提供任何帮助,我将不胜感激。

【问题讨论】:

  • 你有没有弄清楚为什么它说 authClient.request 没有定义?

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


【解决方案1】:

听起来你是在传递auth token,但是你需要传递auth client。

我说的是列表函数的第一个参数:'{userId: 'me', auth: auth}'

尝试将其设为您用来获取令牌的身份验证客户端(例如 google.auth.JWT)。

【讨论】:

    【解决方案2】:

    不要直接使用包含access_token和其他数据的变量auth,您应该先将其设置为oauth凭证。我和你遇到同样的问题。我所做的是(见下面的代码)

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

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

    【讨论】:

    • 这就是灵丹妙药!!!从文档oauth2Client.credentials = token; 执行此操作无效。
    猜你喜欢
    • 2016-03-18
    • 2018-07-09
    • 2016-05-29
    • 2015-01-11
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2018-01-17
    • 2015-01-26
    相关资源
    最近更新 更多