【问题标题】:Gmail API message.list from trigger来自触发器的 Gmail API message.list
【发布时间】:2016-01-11 05:35:34
【问题描述】:

我在创建每晚运行的 google 脚本时遇到问题。当我从脚本文件运行代码并按预期运行时,代码运行良好,但是当由安装的触发器执行时,我得到以下信息:

TypeError:无法从未定义中读取属性“长度”。 (第 17 行,文件“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() 的问题

提前感谢您的帮助!


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

【问题讨论】:

    标签: google-apps-script gmail-api


    【解决方案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 将导致您的错误。

    【讨论】:

    • 但是该特定查询应该返回消息。我试图从编辑器运行脚本,然后在一分钟后触发。当由触发器运行时,它没有返回任何内容,但是当从编辑器运行时,它返回 63 条消息。如果我指定我的电子邮件而不是使用“我”标识符,触发器似乎没有以用户身份运行应用程序,或者没有身份验证来查看用户的电子邮件
    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2023-04-08
    • 2011-11-16
    • 2018-08-12
    • 2018-04-26
    • 2020-09-08
    相关资源
    最近更新 更多