2015-10-13 70 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