Saya punya sesuatu seperti ini diretas. Saya mungkin mendasarkannya pada sesuatu yang ditulis orang lain, tetapi sudah lama sekali saya tidak ingat.
Sejak itu telah menjauh dengan andal. Begini cara kerjanya:
Secara umum, ia mencari pesan dengan tag tertentu dan kemudian mengganti tag itu dengan yang lain lalu mengarsipkannya.
Secara khusus , pesan ditandai dengan filter kotak masuk untuk menunjukkan bagaimana mereka akan "kedaluwarsa." Dalam contoh di bawah ini didasarkan pada berapa usia mereka, dan labelnya disebut Bulk/Expires/[Daily|Weekly|Monthly]
. (Catatan: ini adalah tag bersarang, tetapi mereka tidak perlu disarangkan, saya hanya ingin membuat mereka teratur seperti ini). Setiap hari beberapa Skrip Google Apps akan dijalankan untuk memeriksa apakah utas dalam label tersebut cocok dengan suatu kondisi, umumnya tanggal. Kemudian akan mengganti tag itu dengan tag lain (disebut di Bulk/Expired
bawah) dan mengarsipkannya. Anda juga bisa menghapus pesan itu.
Ini adalah kode (dengan komentar tambahan) yang akan membersihkan pesan lebih dari satu hari. Ini pengaturan untuk memicu setiap hari pada jam 4 pagi:
function cleanUpDaily() {
// Enter # of days before messages are archived
var delayDays = 1
// make an empty Date() object
var maxDate = new Date();
// Set that date object ('maxDate')to the current data minus 'delayDays'.
// In this case it's a date 1 day before the time when this runs.
maxDate.setDate(maxDate.getDate()-delayDays);
// this is the label that finds messages eligible for this filter
var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Daily");
// this is the new label so I know a message has already been "Expired"
var newLabel = GmailApp.getUserLabelByName("Bulk/Expired");
// Get the message threads which might need to be expired.
var threads = currLabel.getThreads();
// Iterate over those threads and check if they need to be expired
for (var i = 0; i < threads.length; i++) {
// You can put whatever kinds of conditions in here,
// but this is just going to check if they were recieved before
// 'maxDate' which here is 1 day before runtime.
if (threads[i].getLastMessageDate()<maxDate)
{
// If they're old, archive them
threads[i].moveToArchive();
// Remove the old label, they won't need to be expired again
// This isn't required, but it will make it slow, and Google will
// time-out things that take too long, in my experaince it will
// become slow and start timing out if there are more than a few
// dozen threads to process, YMMV.
threads[i].removeLabel(currLabel);
// Label the thread with a new label indicating it's gone through this
// process. Also not strictly necessary, but it's useful if you'd like
// to do some more processing on them in the future.
threads[i].addLabel(newLabel);
}
}
}
Berikut kode untuk melakukan ini untuk hal-hal yang seharusnya berakhir dalam seminggu atau sebulan, Anda mengatur pemicu untuk menjalankan fungsi-fungsi ini baik mingguan atau bulanan.
function cleanUpWeekly() {
var delayDays = 7 // Enter # of days before messages are moved to archive
var maxDate = new Date();
maxDate.setDate(maxDate.getDate()-delayDays);
var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Weekly"); // this is the label that finds messages eligible for this filter
var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
var threads = currLabel.getThreads();
for (var i = 0; i < threads.length; i++) {
if (threads[i].getLastMessageDate()<maxDate)
{
threads[i].moveToArchive();
threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
threads[i].addLabel(newLabel);
}
}
}
function cleanUpMonthly() {
var delayDays = 30 // Enter # of days before messages are moved to archive
var maxDate = new Date();
maxDate.setDate(maxDate.getDate()-delayDays);
var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Monthly"); // this is the label that finds messages eligible for this filter
var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
var threads = currLabel.getThreads();
for (var i = 0; i < threads.length; i++) {
if (threads[i].getLastMessageDate()<maxDate)
{
threads[i].moveToArchive();
threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
threads[i].addLabel(newLabel);
}
}
}
Saat ini saya sedang mengerjakan salah satu yang akan menerima Bulk/Expired
pesan dan jika mereka memiliki Purge
tag, itu akan menghapusnya secara permanen. Saya enggan untuk pernah menghapus email (gila), tetapi banyak dari mailing list yang diarsipkan cenderung mencemari hasil pencarian. Gangguan ini sudah mulai membanjiri kecenderungan menimbun digital saya. Satu-satunya perubahan adalah for
loop memeriksa untuk melihat apakah pesan memiliki tag 'Bersihkan'. Ini bukan sepele, karena label yang diberikan thread dikembalikan sebagai array, dan jadi saya harus memeriksa array yang akan menambahkan beberapa baris kode. Kecuali saya menemukan cara yang lebih licin.
Saya terutama menggunakan ini untuk mengelola buletin dengan Google Inbox. Saya menyiapkan bundel pesan untuk tag `Massal / Kedaluwarsa / Harian ', dan filter memastikan hanya buletin hari ini di sana. Lalu apakah saya membacanya pada hari tertentu atau tidak, yang terbaru ada di sana. Ini seperti meretas Kotak Masuk ke pembaca RSS. Saya melakukan hal yang sama untuk buletin berkala / surat massal yang keluar mingguan atau bulanan. Secara umum saya kadaluwarsa ketika usia mereka menghilangkan relevansinya.