-
Star
(177)
You must be signed in to star a gist -
Fork
(36)
You must be signed in to fork a gist
-
-
Save gene1wood/0f455239490e5342fa49 to your computer and use it in GitHub Desktop.
| /* | |
| This script, when used with Google Apps Scripts, will delete 400 emails and | |
| can be triggered to run every few minutes without user interaction enabling you | |
| to bulk delete email in Gmail without getting the #793 error from Gmail. | |
| Google returns a maximum of 500 email threads in a single API call. | |
| This script fetches 400 threads in case 500 threads is causing timeouts | |
| Configure the search query in the code below to match the type of emails | |
| you want to delete | |
| See - https://developers.google.com/apps-script/reference/gmail/gmail-app#search(String) | |
| and https://support.google.com/mail/answer/7190 | |
| Browse to https://script.google.com/ | |
| Start a script and paste in the code below. | |
| After you paste it in, save it. | |
| Now you need to set the authorized scopes for the script ( https://developers.google.com/apps-script/concepts/scopes ) | |
| On the left side of the screen, hover over the gear symbol and then click on Project Settings. | |
| Enable 'Show "appsscript.json" manifest file in editor' | |
| On the left side of the screen, click on the < > to return to the code editor | |
| You should see a new file appear, appscript.json. Click on it. | |
| Edit the file to add an oauthScopes entry for mail.google.com. It should look something like this. | |
| { | |
| "oauthScopes": [ | |
| "https://mail.google.com/", | |
| "https://www.googleapis.com/auth/gmail.readonly", | |
| "https://www.googleapis.com/auth/gmail.modify" | |
| ], | |
| "timeZone": "America/New_York", | |
| "dependencies": { | |
| "enabledAdvancedServices": [ | |
| { | |
| "userSymbol": "Gmail", | |
| "version": "v1", | |
| "serviceId": "gmail" | |
| } | |
| ] | |
| }, | |
| "exceptionLogging": "STACKDRIVER", | |
| "runtimeVersion": "V8" | |
| } | |
| In the drop down at the top select the function you want | |
| to run. For example, you could run the batchDeleteEmail function. | |
| This gist contains a few different functions to give examples of how to do other actions | |
| besides deleting emails. For example if you wanted to mark all mail with the "work" label as read | |
| you could run the markReadLabelWork function | |
| Next click the little clock looking button. | |
| This is for your triggers. You can set up how frequently you want the script | |
| to run (I did mine for every minute but others are seeing execution take longer than | |
| a minute in which case you may want to run every 5 or 15 minutes). | |
| This writeup from @timur-tabi goes into more detail : https://docs.google.com/document/d/1PLfAnNus-B87gHS1pkbmzFTkWckAPNcqmvO7hFo_gBc/edit | |
| Source : # https://productforums.google.com/d/msg/gmail/YeQVDuPIQzA/kpZPDDj8TXkJ | |
| This gist includes additions by @kulemantu found in their fork : https://gist.github.com/kulemantu/84682cfebe72eb925cfe/revisions | |
| */ | |
| function batchDeleteEmail() { | |
| processEmail('label:inbox from:user@example.com', 'moveThreadsToTrash'); | |
| } | |
| function markReadLabelWork() { | |
| processEmail('label:work', 'markThreadsRead'); | |
| } | |
| function markReadFromInfoExample() { | |
| processEmail('from:user@example.com', 'markThreadsRead'); | |
| } | |
| function processEmail(search, batchAction) { | |
| var batchSize = 100; // Process up to 100 threads at once | |
| var searchSize = 400; // Limit search result to a max of 400 threads. Use this if you encounter the "Exceeded maximum execution time" error | |
| var threads = GmailApp.search(search, 0, searchSize); | |
| for (j = 0; j < threads.length; j += batchSize) { | |
| GmailApp[batchAction](threads.slice(j, j + batchSize)); | |
| } | |
| } |
Does anyone have one for yahoo emails?
Hey, been tweaking the script a bit to only delete emails from my trash, and I'm not really a coder so I'm not entirely sure what I'm doing either.
I changed
function batchDeleteEmail() {
processEmail('label:inbox from:user@example.com', 'moveThreadsToTrash');
}
to
function batchDeleteEmail() {
processEmail('in:trash');
}
along with
function batchDeleteEmail() {
processEmail('label:trash');
}
for good measure, but I keep getting this error:
TypeError: GmailApp[batchAction] is not a function
processEmail @ Code.gs:11
batchDeleteEmail @ Code.gs:2
I haven't edited that part of the function either, it's all the same. I've also removed the other two functions, I don't need those. Do I need to convert the GmailApp[batchAction] into a function or is there something else I have to do?
Hi everybody. I don't use this google apps script any more. Now I use a vibe-coded script at https://github.com/yoderj/gmail-maintainer/blob/main/gmail_maintenance.py. This script is designed to identify the most common senders of unread email and to select whose emails to delete.
I recommend using it in conjunction with the "Manage subscriptions" feature in gmail to reduce the amount of junk mail that fills up your gmail inbox.
@yoderj Do you run this script locally on your computer? I didn't think Google Apps Script supported Python.
In that case, it's not an improvement. The whole point behind this Google Apps script is that it runs on the server.
@Helios8170 I suggest you use an AI to help debug this for you. For starters, why did you delete the second parameter to processEmail()?
I continue to see Exceeded Maximum execution time after the script has run for 6m.