/* * Mass Emailer Google Spreadsheet script. * * Changelog: * * 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(120).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(250).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(250); top_panel.add(name_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); ok_btn.addClickHandler(handler); SpreadsheetApp.getActiveSpreadsheet().show(myapp); } function callback(e) { var mail = GmailApp.getMessageById(e.parameter.message); _send_mails(mail, e.parameter.name); var app = UiApp.getActiveApplication(); app.close(); return app; } function _send_mails(mail, name) { 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; 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); }