Skip to content

Instantly share code, notes, and snippets.

@r3a1d3a1
Last active December 2, 2020 05:52
Show Gist options
  • Save r3a1d3a1/7ee81c5f7dae87258c2bb0b5653bf5cd to your computer and use it in GitHub Desktop.
Save r3a1d3a1/7ee81c5f7dae87258c2bb0b5653bf5cd to your computer and use it in GitHub Desktop.
Slack notification for new emails
//query (q) format: https://support.google.com/mail/answer/7190?hl=en
function unreadCnt() {
var response = Gmail.Users.Messages.list('me', {'q':'-category:promotions -category:forums -category:social', 'labelIds':['UNREAD', 'INBOX']});
var unreadIds = response.messages;
unreadIds = (unreadIds === undefined) ? [] : unreadIds.map(getId);
var newCnt = updateSheet(unreadIds);
if (newCnt > 0)
notifySlack(newCnt);
Logger.log('Unread cnt: ' + unreadIds.length + '\tNew cnt: ' + newCnt);
}
function updateSheet(unreadIds) {
var ss = SpreadsheetApp.openById( /*https://stackoverflow.com/a/36062068/205741*/ );
var prevIdsCnt = ss.getLastRow();
if (prevIdsCnt === 0){
for (var i=0; i<unreadIds.length; i++)
ss.appendRow([unreadIds[i]]);
return unreadIds.length;
}
var prevIds = ss.getSheetValues(1, 1, prevIdsCnt, 1);
var newIdsCnt = 0;
for (var i=0; i<unreadIds.length; i++) {
var exists = false;
for (var j=0; j<prevIds.length; j++) {
if (prevIds[j][0] === unreadIds[i]){
exists = true;
break;
}
}
if (!exists)
newIdsCnt++;
}
ss.insertColumnAfter(1); //To avoid running outa columns
ss.deleteColumn(1);
for (var i=0; i<unreadIds.length; i++)
ss.appendRow([unreadIds[i]]);
return newIdsCnt;
}
function notifySlack(newMsgCnt) {
var data = {
"text": "You have " + newMsgCnt + " new message(s)."
};
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(data)
};
UrlFetchApp.fetch( WEBHOOK_URL, options);
}
function getId(obj){
return obj.id;
}
@r3a1d3a1
Copy link
Author

Fix line 15 and WEBHOOK_URL before deployment.
Ensure enabling required permissions (Gmail read-only & full-access to Spreadsheets) through "Resources -> Advanced Google services"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment