Skip to content

Instantly share code, notes, and snippets.

@gnunicorn
Last active June 6, 2021 05:57
Show Gist options
  • Save gnunicorn/1838132 to your computer and use it in GitHub Desktop.
Save gnunicorn/1838132 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);
}
@gnunicorn
Copy link
Author

Here is the automatic reply to user inquiry message::

function ReplyToUser(e) {
  var name = e.namedValues["name"],
      userEmail = e.namedValues["Email"];
  MailApp.sendEmail(userEmail,
                    "This is the email title",
                    "Here goes the email text",
                    {name:"OpenTechSchool e.V. Board"});
}

@Albin1
Copy link

Albin1 commented Dec 23, 2013

Hello,
It looks like very useful tool.
I would like to try it but I cannot set-up Google spreadsheet to work correctly, I am beginner in programming actually.
Could you share Google spreadsheet which works with that or give clues how to set-up data in spreadsheet ?
thank you

@Terminator-X
Copy link

Sorry, it is broken, since UIapp is unsupported anymore. Must be replaced with HTML service...

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