Skip to content

Instantly share code, notes, and snippets.

@schlos
Forked from gnunicorn/mass_emailer.js
Created August 25, 2018 13:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save schlos/1ab319ad7337fd2ea765ef6b7eb84cf2 to your computer and use it in GitHub Desktop.
Save schlos/1ab319ad7337fd2ea765ef6b7eb84cf2 to your computer and use it in GitHub Desktop.
/*
* Mass Emailer Google Spreadsheet script.
*
* Changelog:
*
* 27. Apr. 2013
* - trial checkbox allows easier debugging
* 16. Feb. 2012
* - released the first version to public
* 15. Feb. 2012
* - add possibility to change the name
* - add full-blown UI
* 10. Feb. 2012
* - add Support to load Mail from Draft
*/
function start_mailer() {
var myapp = UiApp.createApplication().setTitle('Mass Emailer').setHeight(150).setWidth(300);
var top_panel = myapp.createFlowPanel();
top_panel.add(myapp.createLabel("Please select the draft you'd like to be sent"));
var lb = myapp.createListBox(false).setId('msg').setWidth(300).setName('message').setVisibleItemCount(1);
var threads = GmailApp.search('is:draft', 0, 10);
if (threads.length === 0) {
Browser.msgBox("Please save your template as a draft in your gmail account!");
return;
}
for (var i = 0; i < threads.length; i++) {
lb.addItem("" + threads[i].getFirstMessageSubject(), threads[i].getMessages()[0].getId());
}
top_panel.add(lb);
top_panel.add(myapp.createLabel("Name to send from (optional)"));
var name_box = myapp.createTextBox().setName("name").setWidth(300);
top_panel.add(name_box);
var check_box = myapp.createCheckBox().setName("trial").setText("Trail Run").setWidth(300);
top_panel.add(check_box);
var ok_btn = myapp.createButton('Send mails now');
top_panel.add(ok_btn);
myapp.add(top_panel);
var handler = myapp.createServerClickHandler('callback').addCallbackElement(lb).addCallbackElement(name_box).addCallbackElement(check_box);
ok_btn.addClickHandler(handler);
SpreadsheetApp.getActiveSpreadsheet().show(myapp);
}
function callback(e) {
var mail = GmailApp.getMessageById(e.parameter.message);
_send_mails(mail, e.parameter.name, e.parameter.trial);
var app = UiApp.getActiveApplication();
app.close();
return app;
}
function _send_mails(mail, name, trial) {
var ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSelection(),
data = ws.getValues(),
attrs = data.shift(),
count = 0,
mail, bodyCopy, attachments, subjectCopy, idx, line_idx, mail_idx, line;
mail_idx = attrs.indexOf('Email');
if (mail_idx === -1) {
Browser.msgBox("Canceled: At least one row must be called 'email'");
return;
}
attachments = mail.getAttachments();
for (line_idx in data) {
line = data[line_idx];
bodyCopy = mail.getBody();
subjectCopy = mail.getSubject();
for (idx in attrs) {
bodyCopy = bodyCopy.replace("{{" + attrs[idx] + "}}", line[idx]);
subjectCopy = subjectCopy.replace("{{" + attrs[idx] + "}}", line[idx]);
}
count += 1;
if(trial == "true") {
Browser.msgBox("to:" + line[mail_idx] + "\nSubject:" + subjectCopy + "\nBody:" + bodyCopy);
return;
} else {
GmailApp.sendEmail(line[mail_idx], subjectCopy, bodyCopy, {
htmlBody: bodyCopy,
name: name,
attachments: attachments
});
}
}
Browser.msgBox(count + " Mails send");
}
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Send Mass Email", functionName: "start_mailer"}];
ss.addMenu("Mass-Mailer", menuEntries);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment