noneroll/noneroll.gs
Niraj D a1511a2e3d
update unsubscribe link logic
1. find the correct link in the array (the one that starts with http) for parsed
html text
2. assign the last value instead of the 2nd value in the array for
list-unsubscribe
2017-12-18 12:01:02 -05:00

104 lines
3.1 KiB
JavaScript

//run every hour to archive any new email from email in sheet
function arch() {
var sheet = SpreadsheetApp.openById('sheetID');
var range = sheet.getDataRange();
var values = range.getValues();
values = [].concat.apply([], values);
//Logger.log(values)
var threads = GmailApp.getInboxThreads();
var label = GmailApp.getUserLabelByName('zbulk')
for (var i = 0; i < threads.length; i++) {
if(threads[i].isInInbox()){
var msg = threads[i].getMessages()[0];
var email = msg.getFrom().replace(/^.+<([^>]+)>$/, "$1");
if(values.indexOf(email) > -1){
threads[i].addLabel(label);
threads[i].markRead();
threads[i].moveToArchive();
}
}
}
}
//run every day to add any emails added to zbulk folder to sheet
function addEmail() {
var sheet = SpreadsheetApp.openById('sheetID');
var range = sheet.getDataRange();
var values = range.getValues();
values = [].concat.apply([], values);
var label = GmailApp.getUserLabelByName('zbulk')
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var msg = threads[i].getMessages()[0];
var email = msg.getFrom().replace(/^.+<([^>]+)>$/, "$1")
if(values.indexOf(email) < 0){
sheet.appendRow([email])
}
}
}
function getEmails() {
var delayDays = 2
var maxDate = new Date();
maxDate.setDate(maxDate.getDate() - delayDays);
var label = GmailApp.getUserLabelByName("zbulk");
var threads = label.getThreads();
var data = []
for (var i = 0; i < threads.length; i++) {
if (threads[i].getLastMessageDate()>maxDate){
var d = {}
d.subject = threads[i].getFirstMessageSubject()
d.from = threads[i].getMessages()[0].getFrom().replace(/\"|<.*>/g,'')
d.date = threads[i].getLastMessageDate()
d.email = threads[i].getMessages()[0].getFrom().match(/<(.*)>/)[1]
d.uns = null
var uns = threads[i].getMessages()[0].getRawContent().match(/^list\-unsubscribe:(.|\r\n\s)+<(https?:\/\/[^>]+)>/im);
Logger.log(uns+"\n\n")
if(uns) {
d.uns = uns[uns.length-1]
} else {
var rex = /.*?<a[^>]*href=["'](https?:\/\/[^"']+)["'][^>]*>(.*?)<\/a>.*?/gi
while(u = rex.exec(threads[i].getMessages()[0].getBody())){
if(u[0].toLowerCase().indexOf('unsubscribe')!==-1){
for(var i = u.length-1; i >=0; i--){
if(u[i].substring(0,4)=="http"){
d.uns=u[i]
break
}
}
if(d.uns){
break
}
}
}
}
if(d.uns === null){
Logger.log(d.subject)
}
data.push(d)
} else {
break
}
}
return data;
}
//run every day to send summary email including emails from last 24 hours
function noneroll() {
if(getEmails().length > 0) {
var date = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd');
var subject = "Bulk Emails: " + date;
var hB = HtmlService
.createTemplateFromFile('email')
.evaluate().getContent()
MailApp.sendEmail({
to: Session.getActiveUser().getEmail(),
subject: subject,
htmlBody: hB
});
}
}