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 关于我自己帐户的信息。
我曾尝试搜索类似的问题,但我找到的最接近的是以下问题,但似乎都没有明确的解决方案:
- How do I process emails in a shared mailbox using Google Scripts
- Google 帮助论坛 -
我如何在共享邮箱中 运行 Google 脚本
是否需要重写脚本(如果需要,如何重写?),或者有没有办法将 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 认真看待这个问题的机会就越大 ;)。
我写了一个脚本,当作为网络应用程序发布时,它将计算收件箱中的电子邮件数量,以及最早发送邮件的日期,并输出为 .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 关于我自己帐户的信息。
我曾尝试搜索类似的问题,但我找到的最接近的是以下问题,但似乎都没有明确的解决方案:
- How do I process emails in a shared mailbox using Google Scripts
- Google 帮助论坛 - 我如何在共享邮箱中 运行 Google 脚本
是否需要重写脚本(如果需要,如何重写?),或者有没有办法将 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 认真看待这个问题的机会就越大 ;)。