Google 收到电子邮件时触发的 gmail 脚本
Google gmail script that triggers on incoming email
我一直在阅读 gmail addons。当您打开电子邮件时,它们会触发上下文触发器。
是否可以在收到邮件时触发服务?我能找到的最好的是 unconditional
,但只有在打开电子邮件时才会触发。
您无法为每封电子邮件创建触发器,但您可以执行类似的操作 。
例如您可以:
设置一个过滤器,在您要处理的传入电子邮件上放置一个特殊标签。
设置一个 运行 每 10 分钟甚至每分钟重复出现的脚本。在脚本中,您可以提取所有具有给定标签的电子邮件,并相应地处理它们,完成后删除标签。
function processEmails() {
var label = GmailApp.getUserLabelByName("Need To Process");
var threads = label.getThreads();
for (var i = threads.length - 1; i >= 0; i--) {
//Process them in the order received
threads[i].removeLabel(label).refresh();
}
}
然后您可以在 time based trigger 上设置此功能,以便 运行 随心所欲地使用它。
如果您想跟踪已处理的电子邮件,可以创建另一个 "processed" 标签并在处理完成后将其添加到邮件中。
我在正确设置标签方面遇到了一些麻烦,所以我包含了用于记录您的标签的代码。我也修改了 user3312395 的代码以添加新标签。
也谢谢你原来的回答!
function emailTrigger() {
var label = GmailApp.getUserLabelByName('Name of Label to Process');
var newLabel = GmailApp.getUserLabelByName('New Label Name');
if(label != null){
var threads = label.getThreads();
for (var i=0; i<threads.length; i++) {
//Process them in the order received
threads[i].removeLabel(label);
threads[i].addLabel(newLabel);
//run whatever else here
}
}
}
function getLabels(){
var labels = GmailApp.getUserLabels();
for(i=0; i<labels.length; i++){
Logger.log(labels[i].getName());
}
}
实际上,他们的 pub/sub 服务有些复杂,需要设置 OAuth 身份验证。使用此服务,您必须能够获得推送通知。但我也认为每 10 分钟甚至 1 分钟设置一个 运行 的触发器更容易。
是的,您可以为每封新邮件触发一个功能!
只需使用搜索查询 newer_than:1h
。例如,每 10 分钟触发一次 运行。然后,您将本质上成为每封新电子邮件的运行宁逻辑(最多延迟 10 分钟,这可能没问题)。
var TRIGGER_NAME = 'handleNewEmails'
// Maximum number of threads to process per run.
var PAGE_SIZE = 150
var INTERVAL = 10
function Install() {
// First run 2 mins after install
ScriptApp.newTrigger(TRIGGER_NAME)
.timeBased()
.at(new Date(new Date().getTime() + 1000 * 60 * 2))
.create()
// Run every 10 minutes there after
ScriptApp.newTrigger(TRIGGER_NAME)
.timeBased().everyMinutes(INTERVAL).create()
}
function Uninstall() {
var triggers = ScriptApp.getProjectTriggers()
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === TRIGGER_NAME) ScriptApp.deleteTrigger(triggers[i])
}
}
function handleNewEmails() {
var threads = GmailApp.search("newer_than:1h", 0, PAGE_SIZE)
for (var i = 0; i < threads.length; i++) {
var thread = threads[i]
// Do something with the thread.
}
}
我一直在阅读 gmail addons。当您打开电子邮件时,它们会触发上下文触发器。
是否可以在收到邮件时触发服务?我能找到的最好的是 unconditional
,但只有在打开电子邮件时才会触发。
您无法为每封电子邮件创建触发器,但您可以执行类似的操作
例如您可以:
设置一个过滤器,在您要处理的传入电子邮件上放置一个特殊标签。
设置一个 运行 每 10 分钟甚至每分钟重复出现的脚本。在脚本中,您可以提取所有具有给定标签的电子邮件,并相应地处理它们,完成后删除标签。
function processEmails() {
var label = GmailApp.getUserLabelByName("Need To Process");
var threads = label.getThreads();
for (var i = threads.length - 1; i >= 0; i--) {
//Process them in the order received
threads[i].removeLabel(label).refresh();
}
}
然后您可以在 time based trigger 上设置此功能,以便 运行 随心所欲地使用它。
如果您想跟踪已处理的电子邮件,可以创建另一个 "processed" 标签并在处理完成后将其添加到邮件中。
我在正确设置标签方面遇到了一些麻烦,所以我包含了用于记录您的标签的代码。我也修改了 user3312395 的代码以添加新标签。 也谢谢你原来的回答!
function emailTrigger() {
var label = GmailApp.getUserLabelByName('Name of Label to Process');
var newLabel = GmailApp.getUserLabelByName('New Label Name');
if(label != null){
var threads = label.getThreads();
for (var i=0; i<threads.length; i++) {
//Process them in the order received
threads[i].removeLabel(label);
threads[i].addLabel(newLabel);
//run whatever else here
}
}
}
function getLabels(){
var labels = GmailApp.getUserLabels();
for(i=0; i<labels.length; i++){
Logger.log(labels[i].getName());
}
}
实际上,他们的 pub/sub 服务有些复杂,需要设置 OAuth 身份验证。使用此服务,您必须能够获得推送通知。但我也认为每 10 分钟甚至 1 分钟设置一个 运行 的触发器更容易。
是的,您可以为每封新邮件触发一个功能!
只需使用搜索查询 newer_than:1h
。例如,每 10 分钟触发一次 运行。然后,您将本质上成为每封新电子邮件的运行宁逻辑(最多延迟 10 分钟,这可能没问题)。
var TRIGGER_NAME = 'handleNewEmails'
// Maximum number of threads to process per run.
var PAGE_SIZE = 150
var INTERVAL = 10
function Install() {
// First run 2 mins after install
ScriptApp.newTrigger(TRIGGER_NAME)
.timeBased()
.at(new Date(new Date().getTime() + 1000 * 60 * 2))
.create()
// Run every 10 minutes there after
ScriptApp.newTrigger(TRIGGER_NAME)
.timeBased().everyMinutes(INTERVAL).create()
}
function Uninstall() {
var triggers = ScriptApp.getProjectTriggers()
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === TRIGGER_NAME) ScriptApp.deleteTrigger(triggers[i])
}
}
function handleNewEmails() {
var threads = GmailApp.search("newer_than:1h", 0, PAGE_SIZE)
for (var i = 0; i < threads.length; i++) {
var thread = threads[i]
// Do something with the thread.
}
}