Created
June 20, 2023 01:53
-
-
Save orvn/9e06304132f0671fc14ce4e212efe029 to your computer and use it in GitHub Desktop.
Aggregate Gmail unreads by sender using Google Apps Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
*** Aggregate Gmail Unreads | |
*** | |
*** A Google Apps Script for counting and sorting through unread emails | |
*** Works for both Gmail and Google Apps aka GSuite aka Google for Work aka Google Workspace | |
*** ES5 syntax must be used for .gs files, do not use ES6 or higher notation | |
*** | |
*** Usage: go to script.google.com, create a new project, save and run this script, authenticate, and wait (< 6 minutes) | |
*** | |
**/ | |
// Enum for selecting the criteria to use when organizing senders | |
var SortOption = { | |
SENDER_NAME: 0, | |
FULL_EMAIL: 1, | |
DOMAIN: 2 | |
}; | |
// Optionally set the sort option here by replacing DOMAIN | |
var sortOption = SortOption.DOMAIN; | |
function countUnreadEmails() { | |
var query = 'is:unread'; | |
var start = 0; | |
var max = 200; | |
var allUnreadThreads = []; | |
while (true) { | |
var threads = GmailApp.search(query, start, max); | |
if (threads.length === 0) { | |
break; | |
} | |
allUnreadThreads = allUnreadThreads.concat(threads); | |
start += max; | |
} | |
// allUnreadThreads should contain all the unread threads, fetched in chunks of 200 | |
// this bypasses the usual limit from the GmailApp.search() method | |
var sendersCount = {}; | |
var totalUnreads = 0; | |
for (var i = 0; i < allUnreadThreads.length; i++) { | |
var messages = allUnreadThreads[i].getMessages(); | |
for (var j = 0; j < messages.length; j++) { | |
if (messages[j].isUnread()) { | |
var from = messages[j].getFrom(); | |
var senderName = from.split("<")[0].trim(); | |
var senderEmail = from; | |
var senderDomain = from.split("@")[1].split(">")[0]; | |
var senderKey; | |
switch(sortOption) { | |
case SortOption.SENDER_NAME: | |
senderKey = senderName; | |
break; | |
case SortOption.FULL_EMAIL: | |
senderKey = senderEmail; | |
break; | |
case SortOption.DOMAIN: | |
senderKey = senderDomain; | |
break; | |
} | |
if (!sendersCount[senderKey]) { | |
sendersCount[senderKey] = 0; | |
} | |
sendersCount[senderKey]++; | |
totalUnreads++; | |
} | |
} | |
} | |
var sortable = []; | |
for (var sender in sendersCount) { | |
sortable.push([sender, sendersCount[sender]]); | |
} | |
sortable.sort(function(a, b) { | |
return b[1] - a[1]; | |
}); | |
Logger.log("Unread email count by sender:"); | |
for (var i = 0; i < sortable.length; i++) { | |
Logger.log(sortable[i][0] + ": " + sortable[i][1]); | |
} | |
Logger.log("Total Unread Emails: " + totalUnreads); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment