Automatically deletes old emails that match the specified label.
- Create a new Google Apps Script at https://script.google.com
- Replace the empty script with the javascript below
Automatically deletes old emails that match the specified label.
| // The name of the Gmail Label that is to be checked for purging? | |
| var LABEL_TO_DELETE = "direct-dev"; | |
| // Purge messages in the above label automatically after how many days? | |
| var DELETE_AFTER_DAYS = "30"; | |
| var TIMEZONE = "AEST"; | |
| // Maximum number of threads to process per run | |
| var PAGE_SIZE = 100; | |
| // If number of threads exceeds page size, resume job after X mins (max execution time is 6 mins) | |
| var RESUME_FREQUENCY = 10; | |
| /* | |
| IMPLEMENTATION | |
| */ | |
| function Intialize() { | |
| return; | |
| } | |
| function Install() { | |
| // First run 2 mins after install | |
| ScriptApp.newTrigger("deleteGmail") | |
| .timeBased() | |
| .at(new Date((new Date()).getTime() + 1000*60*2)) | |
| .create(); | |
| // Run daily there after | |
| ScriptApp.newTrigger("deleteGmail") | |
| .timeBased().everyDays(1).create(); | |
| } | |
| function Uninstall() { | |
| var triggers = ScriptApp.getProjectTriggers(); | |
| for (var i=0; i<triggers.length; i++) { | |
| ScriptApp.deleteTrigger(triggers[i]); | |
| } | |
| } | |
| function deleteGmail() { | |
| var age = new Date(); | |
| age.setDate(age.getDate() - DELETE_AFTER_DAYS); | |
| var purge = Utilities.formatDate(age, TIMEZONE, "yyyy-MM-dd"); | |
| var search = "label:" + LABEL_TO_DELETE + " before:" + purge; | |
| Logger.log("PURGE: " + purge); | |
| Logger.log("SEARCH: " + search); | |
| try { | |
| var threads = GmailApp.search(search, 0, PAGE_SIZE); | |
| // Resume again in 10 minutes | |
| if (threads.length == PAGE_SIZE) { | |
| Logger.log("Scheduling follow up job..."); | |
| ScriptApp.newTrigger("deleteGmail") | |
| .timeBased() | |
| .at(new Date((new Date()).getTime() + 1000*60*RESUME_FREQUENCY)) | |
| .create(); | |
| } | |
| // Move threads/messages which meet age criteria to trash | |
| Logger.log("Processing " + threads.length + " threads..."); | |
| for (var i=0; i<threads.length; i++) { | |
| var thread = threads[i]; | |
| if (thread.getLastMessageDate() < age) { | |
| thread.moveToTrash(); | |
| } else { | |
| var messages = GmailApp.getMessagesForThread(threads[i]); | |
| for (var j=0; j<messages.length; j++) { | |
| var email = messages[j]; | |
| if (email.getDate() < age) { | |
| email.moveToTrash(); | |
| } | |
| } | |
| } | |
| } | |
| } catch (e) {} | |
| } |