Отправляем письма скриптом 2
Друзья, недавно в наш чат пришла Варя и попросила помочь с регулярной отправкой почты из Google Таблицы скриптом.
Задача звучала так — есть постоянно обновляемый (например, формулой QUERY) список адресов электронной почты. Нам нужно по расписанию вызывать скрипт и отправлять письма только на новые адреса из этого списка.
Рассказываем про решение:
*С бесплатного аккаунта Google Документов можно будет отправлять не более 100 писем в день
- Мы завели лист с логом отправленных писем (в примере — лист “лог”). Туда наш скрипт будет записывать адреса, на которые он отправил письма во время своего запуска и, на всякий случай, время и дату отправки.
- Список для отправки мы будем формировать функцией 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)
}
}
}