-
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)); | |
| } | |
| } |
I continue to see Exceeded Maximum execution time after the script has run for 6m.
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()?
Thanks. Good detailed instructions, worked perfectly.
For some reason, when I arrived at https://script.google.com/, the "CREATE APPS SCRIPT" button at the center of the page led to 400 errors. But the button on the side of the script to create a new project worked. This could be because I was using my secondary account, not my primary one.