Отправляем письма скриптом 2

Eugeny Namokonov
2 min readNov 9, 2018

--

Друзья, недавно в наш чат пришла Варя и попросила помочь с регулярной отправкой почты из Google Таблицы скриптом.

Задача звучала так — есть постоянно обновляемый (например, формулой QUERY) список адресов электронной почты. Нам нужно по расписанию вызывать скрипт и отправлять письма только на новые адреса из этого списка.

ВЖУХ

Рассказываем про решение:

*С бесплатного аккаунта Google Документов можно будет отправлять не более 100 писем в день

Таблица со скриптом.

  1. Мы завели лист с логом отправленных писем (в примере — лист “лог”). Туда наш скрипт будет записывать адреса, на которые он отправил письма во время своего запуска и, на всякий случай, время и дату отправки.
  2. Список для отправки мы будем формировать функцией FILTER, функция из списка всех адресов для отправки вычтет те адреса, письма на которые уже отправлены (то есть адреса из лога) и оставит те адреса, на которые нам нужно отправить письма в следующий запуск скрипта.
=FILTER(A3:A;ISNA(MATCH(A3:A;’лог’!B3:B;0)))

(про такой FILTER мы писали здесь)

сейчас лог пуст и поэтому в списке отправки — все адреса из исходного списка

В диапазоне A3:A — все адреса

В диапазоне C3:C — адреса для следующей отправки, там функция FILTER (сейчас туда попал весь список из A3:A, т.к. наш лог пуст)

F2, G2 — тема и текст для писем

Чтоб поставить скрипт на регулярное выполнение, допустим, каждый час — нужно создать триггер.

Открываем в редакторе скриптов Правка > Триггеры текущего проекта и создаем там что-то подобное:

Правка > Триггеры текущего проекта

Таблица со скриптом.

Доступ к скрипту можно получить, сделав копию Таблицы (Файл > Создать копию) и открыв Инструменты > Редактор скриптов.

Скрипт текстом:

function goemails() {

var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName("лист лист лист")
var emails = sheet.getRange("c3:c").getValues()
var subj = sheet.getRange("f2").getValue()
var body = sheet.getRange("g2").getValue()
var arr = []

if(emails[0]!=''){
for(var t = 0; t < emails.length && emails[t] != ''; t++){

MailApp.sendEmail(emails[t], subj, body)
arr = [[new Date(), emails[t][0]]]

//вставляем лог
ss.getSheetByName("лог").getRange(ss.getSheetByName("лог")
.getLastRow()+1, 1, 1, 2).setValues(arr)
}
}
}

Еше про простые скрипты по отправке писем мы писали здесь, здесь и здесь.

--

--