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

How can a Google script gather information from a shared mailbox?

我写了一个脚本,当作为网络应用程序发布时,它将计算收件箱中的电子邮件数量,以及最早发送邮件的日期,并输出为 .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');
}

这工作正常,但我现在希望此脚本 return 来自我有权访问的共享邮箱的相同信息。由于这是一个共享邮箱,我无法选择仅访问其 Google 驱动器并将脚本保存在那里(如果我弄错了,请告诉我!),因此脚本只会 return 关于我自己帐户的信息。

我曾尝试搜索类似的问题,但我找到的最接近的是以下问题,但似乎都没有明确的解决方案:

是否需要重写脚本(如果需要,如何重写?),或者有没有办法将 GmailApp class 定向到共享邮箱而不是我自己的邮箱?

所以我认为您的共享邮箱应该设置为一个普通的旧 google 用户。如果是这样,那么您没有理由不能为他们设置 google 驱动器。

这个问题的第二部分是你想用这个脚本创建什么,如果你只想要共享邮箱中的信息,你可以:

  • 将脚本放在共享用户的驱动器中并运行作为他们
  • 将脚本留在您的驱动器中,将其设置为 运行 作为 User accessing the web app(在 Publish -> Deploy as web app... 中)并且当您 运行 它时,请确保您已登录作为共享用户。

现在,如果您想合并这两个信息提要,那就是另一回事了,我认为您无法在同一个脚本中 运行 作为两个不同的用户。我还测试了图书馆,他们似乎使用相同的会话用户,所以据我所知,你真的只有一个选择。创建一个 webapp 脚本来提取信息并将其 运行 作为您的共享用户,并将其 return 作为 json/xml (如果您只是附加它,甚至是 CSV),然后使用 HTTP 调用(使用 URLFetchApp)在您现有的脚本中检索该信息并对其进行处理,并用它做任何您需要的事情(运行ning as you)。这将是一个缓慢的选择,但至少它会做你想做的。

不知道您是否找到了解决问题的方法。 我也不知道这是否能解决您的问题,但已向 Google Cloud Community and on Google Issue Tracker 提出功能请求,以允许从委派的邮箱访问 Gmail Apps 脚本 add-ons。 赞成票越多,Google 认真看待这个问题的机会就越大 ;)。