来自触发器的Gmail API message.list

时间:2015-10-13 12:48:42

标签: google-apps-script gmail-api

我在创建一个每晚都会运行的Google脚本时遇到问题。当我从脚本文件运行它并且按预期运行时,代码运行正常,但是当由安装的触发器执行时,我得到以下内容:

  

TypeError:无法读取属性"长度"来自undefined。 (第17行,文件"主要")

编辑: 要清楚我知道所使用的特定查询必须返回结果,因为从脚本编辑器运行相同的脚本可以正常工作

代码:

function doGet(query) {
  var sSheet = sheetSelect(),  //calls spreadsheet selection function and assigns the spreadsheet to variable
      queriedMessages,         //object to store the queried messages list
      pageToken,               //string token value that will be pulled from the queredMessages
      auth = 'me';

  if (!query) query = 'in:all newer_than:1d -is:chats -in:trash';
  do {
    queriedMessages = Gmail.Users.Messages.list(auth, {'q':query, 'pageToken':pageToken});  //callls the Gmail API to query messages
    dataOutput(sSheet, queriedMessages.messages, queriedMessages.messages.length);          //calls function to output all data to spreadsheet from the current list
        pageToken = queriedMessages.nextPageToken;                                              //gets the next page token from the list
      }

  while (pageToken);                                                                        //the loop is executed until there are no more next page tokens left
}

为什么它表现得如此不同?我尝试过为特定的电子邮件提供userId。似乎这可能是某种身份验证问题,但除了忘记Gmail API以及使用Gmail应用程序的迂回方式之外,我无法弄清楚如何修复它,因为它似乎是Gmail API方法message.list()的一个问题

提前感谢您的帮助!

我成功解决了这个问题。问题是我想留下一个选项来传递函数调用的查询。问题是,安装的触发器实际上将一个变量传递给查询变量,然后没有设置新的触发器。

1 个答案:

答案 0 :(得分:1)

我认为它比这简单得多。如果我在最后一天列出消息,我会得到:

请求:

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=newer_than%3A1d

<强>响应:

{
 "messages": [
    {
     "id": "150612f9d7f83db9",
     "threadId": "150611d4e92b7a5f"
    }, ...
  ]
}

如果我在最后一秒列出消息,我会得到:

请求:

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=newer_than%3A1s

<强>响应:

{
 "resultSizeEstimate": 0
}

换句话说,如果您没有收到该特定查询的消息,则queriedMessages.messages将为undefined,而queriedMessages.messages.length会引发您的错误。