Google脚本如何从共享邮箱收集信息?

时间:2015-08-18 10:22:58

标签: google-apps-script gmail gmail-api

我编写了一个脚本,当发布为网络应用时,会计算收件箱中的电子邮件数量,以及最早发送的邮件的日期,并输出为.csv:

function doGet() {
  // get all threads in inbox  
  var threads = GmailApp.getInboxThreads();
  var dataLength = threads.length

  var earliestMessage = new Date();

  for (var y = 0; y < dataLength; y++) {
    var message = threads[y]

    //sets last message date in thread y
    var msgDate = message.getLastMessageDate();

    //checks last message date to current value of earliestMessage, updates if necessary
    if(msgDate.valueOf() < earliestMessage.valueOf()) {
      earliestMessage = msgDate
    }
  }

  //save to external files
  return ContentService.createTextOutput(dataLength + '\n' + Utilities.formatDate(earliestMessage, 'GMT', 'dd/MM/yyyy')).downloadAsFile('emailData.csv');
}

这很好用,但我现在希望这个脚本从我有权访问的共享邮箱中返回相同的信息。由于这是一个共享邮箱,我无法选择只访问其Google云端硬盘并将脚本保存在那里(如果我在此错误,请告诉我!),因此脚本只返回有关我自己帐户的信息

我一直试图寻找类似的问题,但我发现的最接近的是以下情况,其中似乎都没有明确的解决方案:

是否需要重写脚本(如果是,如何?),还是有办法将GmailApp类指向共享邮箱而不是我自己的?

1 个答案:

答案 0 :(得分:1)

所以我认为您的共享邮箱应该只是一个普通的旧谷歌用户。如果是这样,那么就没有理由不能为他们设置谷歌硬盘。

此问题的第二部分是您要使用此脚本创建的内容,如果您只想要共享邮箱中的信息,则可以:

  • 将脚本放在共享用户的驱动器中并以其身份运行
  • 将脚本保留在驱动器中,将其设置为User accessing the web app(在Publish -> Deploy as web app...中)运行,并在运行时确保以共享用户身份登录。

现在,如果你想要结合两个信息源,这是一个不同的故事,我不相信你可以在同一个脚本中运行两个不同的用户。我也测试了库,他们似乎使用相同的会话用户,所以据我所知,你真的只有一个选项。创建一个webapp脚本来提取信息并将其作为共享用户运行,并将其作为json / xml返回(如果只是附加它,甚至是CSV),然后使用HTTP调用(使用URLFetchApp)现有脚本,用于检索该信息并对其进行处理,并使用它执行任何操作(以您的身份运行)。这将是一个缓慢的选择,但至少它会做你想要的。