-
-
Save schlos/1ab319ad7337fd2ea765ef6b7eb84cf2 to your computer and use it in GitHub Desktop.
Google Apps Script Mass Mailer: always the latest version at https://script.google.com/macros/s/AKfycbyn1qAemrlvvI8QVl2Xgdjs-2E8l5g3vQQaXae0RTAab4xewP0/exec
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
/* | |
* 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