分享一枚非常实用的 google app script,需要的同学可以将其安装于 https://script.google.com/; 它支持全自动调度清理任务,清理任务主要根据 gmail 中的指定搜索条件。
Feature
- 指定
gmail
搜索条件 - 错误 / 边界条件等自动触发新调度
- trigger 唯一
Content of App Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//search string to delete
var SEARCH_STRING = "category:forums";
//tigger function name
var TRIGGER_NAME = "cleanWithScheduler";
//first time job delay (min)
var FIRST_TIME_DELAY_MIN = 1;
// FREQUENCY of scheduler (min)
var RESUME_FREQUENCY = 10;
//batch size
var BATCH_SIZE = 500;
//intialize
function intialize() {
return;
}
//install
function install() {
ScriptApp.newTrigger(TRIGGER_NAME)
.timeBased()
.at(new Date(new Date().getTime() + 1000 * 60 * FIRST_TIME_DELAY_MIN))
.create();
}
//clean triggers
function cleanTriggers() {
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
//clean immediately
function cleanImmediately() {
var NOW = new Date();
Logger.log("SEARCH: " + SEARCH_STRING + " BATCH_SIZE: " + BATCH_SIZE);
try {
var threads = GmailApp.search(SEARCH_STRING, 0, BATCH_SIZE);
Logger.log("Processing " + threads.length + " threads...");
for (var i = 0; i < threads.length; i++) {
var thread = threads[i];
var lastMessageDate = thread.getLastMessageDate();
if (lastMessageDate < NOW) {
Logger.log("lastMessageDate " + lastMessageDate);
thread.moveToTrash();
} else {
var messages = GmailApp.getMessagesForThread(threads[i]);
for (var j = 0; j < messages.length; j++) {
var email = messages[j];
if (email.getDate() < NOW) {
Logger.log("Start to move this mail to trash.");
email.moveToTrash();
Logger.log("Mail has been moved to trash.");
}
}
}
}
} catch (e) {
Logger.log("error: " + e.message);
}
}
//schedule new job
function scheduleNewJob() {
//before new job, we clear all triggers first
Logger.log("clean triggers...");
cleanTriggers();
Logger.log("Scheduling one new job...");
ScriptApp.newTrigger(TRIGGER_NAME)
.timeBased()
.at(new Date(new Date().getTime() + 1000 * 60 * RESUME_FREQUENCY))
.create();
}
//clean with scheduler
function cleanWithScheduler() {
var NOW = new Date();
Logger.log("SEARCH: " + SEARCH_STRING + " BATCH_SIZE: " + BATCH_SIZE);
try {
var threads = GmailApp.search(SEARCH_STRING, 0, BATCH_SIZE);
if (threads.length == BATCH_SIZE) {
scheduleNewJob();
}
Logger.log("Processing " + threads.length + " threads...");
for (var i = 0; i < threads.length; i++) {
var thread = threads[i];
var lastMessageDate = thread.getLastMessageDate();
if (lastMessageDate < NOW) {
Logger.log("lastMessageDate " + lastMessageDate);
thread.moveToTrash();
} else {
var messages = GmailApp.getMessagesForThread(threads[i]);
for (var j = 0; j < messages.length; j++) {
var email = messages[j];
if (email.getDate() < NOW) {
Logger.log("Start to move this mail to trash.");
email.moveToTrash();
Logger.log("Mail has been moved to trash.");
}
}
}
}
} catch (e) {
Logger.log("error: " + e.message);
scheduleNewJob();
}
}
留下评论