2015-10-13 72 views
1

我在创建每天晚上都会运行的Google脚本时遇到了问题。该代码运行正常,当我从脚本文件运行它,并按照我们的期望,但通过安装的触发器执行时,我得到如下:来自trigger的Gmail API message.list

TypeError: Cannot read property "length" from undefined. (line 17, file "Main")

编辑:要清楚我知道的特定查询采用了返回结果从脚本编辑器中运行相同的脚本工作正常

代码:

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方法的一个问题messages.list()

感谢您提前给予任何帮助!


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

回答

0

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

请求:

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.messagesundefined,如果你得到与特定查询的任何消息,并queriedMessages.messages.length会引起你的错误。

+0

但是,该特定的查询应该返回消息。我试图从编辑器运行脚本,然后稍后触发。当通过触发器运行时,它不会返回任何内容,但是从编辑器运行时它将返回63条消息。 似乎触发器不会以用户的身份运行应用程序,或者如果我指定了电子邮件而不是使用“我”标识符,则没有身份验证来查看用户的电子邮件 – Vytautas