Гид по технологиям

Автоматическая отправка писем из Google Таблиц через Google Scripts

6 min read Automation Обновлено 31 Dec 2025
Письма из Google Таблиц через Google Scripts
Письма из Google Таблиц через Google Scripts

TL;DR

Google Scripts позволяет автоматически собирать данные из Google Таблиц и рассылать персонализированные письма одним кликом. В статье показано, как подготовить лист с адресами и текстом, написать скрипт для отправки, добавить пункт меню и улучшить скрипт: HTML-письма, вложения, обработка ошибок и тестирование.

Интерфейс Google Таблиц с примером отправки писем

Эта статья проведёт вас шаг за шагом через процесс настройки листа, создания скрипта и добавления удобного пункта меню, который отправляет персонализированные письма всем нужным людям. На практике это экономит часы ручной работы при регулярных рассылках статусов, отчётов и уведомлений.

Что вы научитесь

  • Подготовить Google Таблицу с данными для рассылки.
  • Написать рабочий Google Apps Script, который отправляет письма по строкам.
  • Добавить пункт меню, чтобы запускать отправку одним кликом.
  • Расширить скрипт: HTML-письма, вложения из Drive, обработка ошибок, тестирование и правила безопасности.

Начало: как подготовить лист для рассылки

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

В примере автор использует лист с названием ‘Send-Emails’. На листе создайте заголовки колонок примерно такими:

  • Recipient — имя получателя.
  • Email — адрес получателя.
  • Part1, Part2, … — фрагменты тела письма (статические или с помощью формул).
  • Параметры — динамические значения (например, число статей за месяц).

Добавляйте формулы в ячейки, чтобы подтягивать данные из других листов. Это даёт возможность подготовить отчёт автоматически и только затем запустить рассылку.

Пример структуры листа Send-Emails в Google Таблицах

Фрагменты сообщения в отдельных колонках для склеивания в скрипте

Используйте статические и динамические сегменты сообщения

Формулы подтягивают данные из других листов

После подготовки листа он может выглядеть так:

Готовый лист для автоматической рассылки

Важно: используйте очевидные имена листа и колонок. Это упростит поддержку и отладку.

Как открыть редактор скриптов и создать функцию

В Google Таблицах выберите меню “Инструменты” → “Редактор сценариев” (Script editor). В открывшемся окне создайте новую функцию и вставьте базовый скрипт ниже.

Открытие редактора скриптов в Google Таблицах

Базовый пример скрипта для отправки простого текстового письма

function sendArticleCountEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.setActiveSheet(ss.getSheetByName('Send-Emails'));
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange('A2:F4');
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; i++) {
    var rowData = data[i];
    var recipient = rowData[0];
    var emailAddress = rowData[1];
    var message1 = rowData[2];
    var message2 = rowData[3];
    var parameter2 = rowData[4];
    var message3 = rowData[5];

    var message = 'Dear ' + recipient + ',\n' + message1 + ' ' + message2 + ' ' + parameter2 + ' ' + message3;
    var subject = 'Your article count for this month';

    MailApp.sendEmail(emailAddress, subject, message);
  }
}

Этот скрипт читаем и прост. Но у него есть ограничения: зафиксированный диапазон и простая отправка текстом. Ниже мы разберём улучшения.

Разбор кода по строкам

  1. Получение и активация листа:
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName('Send-Emails'));
  1. Получение диапазона и значений:
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange('A2:F4');
var data = dataRange.getValues();

Метод getRange принимает строку с адресом диапазона. Метод getValues возвращает двумерный массив.

  1. Обход строк и формирование письма:
var rowData = data[i];
var emailAddress = rowData[1];
var recipient = rowData[0];
// затем собирается message из фрагментов
  1. Отправка письма:
MailApp.sendEmail(emailAddress, subject, message);

MailApp — встроенный сервис Google Apps Script для отправки электронных писем простым способом.

Улучшение: автоматический диапазон и пропуск пустых строк

Фиксированный диапазон неудобен. Лучше определять последний заполненный ряд программно и пропускать пустые почты.

function sendArticleCountEmails_dynamic() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Send-Emails');
  var lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // нет строк с данными
  var dataRange = sheet.getRange(2, 1, lastRow - 1, 6); // с A2 по F
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; i++) {
    var rowData = data[i];
    var recipient = rowData[0];
    var emailAddress = rowData[1];
    if (!emailAddress) continue; // пропустить пустой адрес

    // составление и отправка как ранее
  }
}

Отправка HTML-писем и использование GmailApp

Чтобы облегчить читабельность и добавить форматирование, можно отправлять HTML-письма. Для этого подойдет MailApp.sendEmail с полем htmlBody или GmailApp.

MailApp.sendEmail({
  to: emailAddress,
  subject: subject,
  htmlBody: '

Dear ' + recipient + ',

' + message1 + '

' });

При использовании GmailApp вы получаете дополнительные возможности по работе с черновиками и вложениями.

Добавление вложений из Google Drive

Если нужно отправлять файл-отчёт как вложение, загрузите его из Drive.

var file = DriveApp.getFileById('FILE_ID');
MailApp.sendEmail({
  to: emailAddress,
  subject: subject,
  body: 'Смотрите вложение',
  attachments: [file.getAs(MimeType.PDF)]
});

Не забудьте использовать корректные права доступа к файлам и указывать правильный MIME-тип, если требуется.

Добавление пункта меню для запуска из таблицы

Чтобы запускать функцию из меню Google Таблиц, используйте onOpen и addMenu. Вставьте в редактор скриптов код ниже.

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActive();
  var menuItems = [
    {name: 'Send Emails', functionName: 'sendArticleCountEmails_dynamic'}
  ];
  spreadsheet.addMenu('Send Emails', menuItems);
}

После сохранения и обновления таблицы в меню появится ваш пункт. Нажатие вызовет функцию.

Пункт меню Send Emails в Google Таблицах

Обработка ошибок и логирование

Добавьте try/catch и логирование, чтобы знать, какие письма были отправлены, а какие упали с ошибкой. Также полезно записывать статус отправки в соседнюю колонку.

try {
  MailApp.sendEmail({to: emailAddress, subject: subject, htmlBody: htmlBody});
  sheet.getRange(rowIndex + 2, 8).setValue('SENT');
} catch (err) {
  Logger.log('Error sending to ' + emailAddress + ': ' + err);
  sheet.getRange(rowIndex + 2, 8).setValue('ERROR: ' + err.message);
}

В колонке состояния храните timestamp и статус: SENT / ERROR, чтобы затем можно было повторно обработать неотправленные.

Безопасность, права и лимиты

  • Скрипт запросит доступ к вашему аккаунту при первом запуске. Проверьте разрешения и используйте учётную запись с нужными правами.
  • Учитывайте ежедневные и почтовые лимиты сервиса Google. Ознакомьтесь с официальной документацией по квотам.
  • Не храните в открытых таблицах чувствительную информацию. Если письма содержат персональные данные, удостоверьтесь в соответствии с вашей политикой безопасности и локальными законами.

Тестирование и отладка: советы

  1. Всегда тестируйте на небольшой выборке, например, на своём адресе.
  2. Используйте отдельный столбец для отметок об успешной отправке.
  3. Логируйте ошибки через Logger.log или записывайте их в лист.
  4. Тестируйте HTML-письма в разных почтовых клиентах.
  5. Проверяйте, что динамические формулы в таблице корректно обновляются перед рассылкой.

Расширенные шаблоны и локализация

  • Если вы отправляете письма на разных языках, заведите колонку “lang” и формируйте тело на нужном языке.
  • Для более сложных шаблонов используйте шаблонизатор на стороне скрипта: заменяйте метки вида {{name}} на значение из строки.

Пример простого шаблонизатора:

function renderTemplate(template, data) {
  return template.replace(/{{\s*(\w+)\s*}}/g, function(_, key) {
    return data[key] || '';
  });
}

var template = 'Здравствуйте, {{name}}!\nВаш показатель: {{count}}';
var body = renderTemplate(template, {name: recipient, count: parameter2});

Резервный план и повторная отправка

Если рассылка прерывается, используйте колонку статуса для повторной отправки только тех строк, у которых статус не равен SENT. Это простая, безопасная стратегия повторения.

Когда подход не подходит: ограниченные случаи

  • Если у вас очень большой объём рассылок (массовые маркетинговые кампании), лучше использовать профессиональные сервисы рассылок и API с поддержкой отписки и аналитики.
  • Если у вас строгие требования к GDPR и аудиту, храните логи и согласия отдельно и проконсультируйтесь с юристом по данным.

Чеклист перед первой серьёзной рассылкой

  • Проверить список получателей и избавиться от дубликатов.
  • Убедиться, что динамические формулы в таблице дают ожидаемые значения.
  • Тестировать на ваших адресах и как минимум на нескольких почтовых клиентах.
  • Добавить логирование и колонку статуса.
  • Убедиться в правах доступа к Drive, если нужны вложения.
  • Ознакомиться с текущими квотами Google и правилами отправки почты.

Шаблон SOP для регулярной рассылки (Playbook)

  1. Подготовка данных: обновить исходные листы и дождаться перерасчётов.
  2. Открыть лист ‘Send-Emails’ и проверить случайные 5 строк.
  3. Нажать «Send Emails» в меню.
  4. Проверить колонку статуса и логи.
  5. Повторно отправить строки с ошибками после исправления.

Примеры расширений: автоматический триггер и ежемесячная отправка

Чтобы полностью автоматизировать отправку, можно настроить триггер по времени в редакторе скриптов: «Добавить триггер» → запускать функцию по расписанию (напр., ежемесячно). Помните про права и проверку до первого автоматического запуска.

Критерии приёмки

  • Все строки с валидным адресом получили статус SENT.
  • Нет незапланированных дубликатов рассылки.
  • Журнал ошибок пуст или содержит только обработанные исключения.
  • Письма отображаются корректно в основных почтовых клиентах.

Полезные сниппеты/шпаргалка

  • Получить последний ряд: sheet.getLastRow()
  • Получить диапазон по номеру строки и колонки: sheet.getRange(startRow, startCol, numRows, numCols)
  • Отправить HTML: MailApp.sendEmail({to: addr, subject: sub, htmlBody: html})
  • Приложить файл из Drive: attachments: [file.getAs(MimeType.PDF)]

Частые ошибки и как их исправлять

  • Неправильный диапазон → используйте getLastRow и проверяйте число строк.
  • Пустые или неверные email → добавляйте валидацию перед отправкой.
  • Ошибки прав доступа к файлам → проверьте права на файл в Drive и на приложение (OAuth).

Короткий план действий для менеджера: роль-based checklist

  • Менеджеру по продукту: подтвердить содержание и сегментацию получателей.
  • Оператору данных: проверить и обновить формулы и источники данных.
  • Тестировщику: проверить шаблон письма и итоговое отображение в почтовых клиентах.

Заключение

Автоматизация рассылок через Google Scripts даёт быстрый выигрыш в времени и снижает ручной труд. Начните с простого рабочего скрипта, протестируйте, затем постепенно добавляйте функциональность: HTML-письма, вложения, логирование и автоматические триггеры. Вложите немного усилий в настройку — и сэкономите часы работы каждый период.

Поделитесь в комментариях своими примерами использования Google Scripts — какие шаблоны и приёмы вы применяли для автоматизации?

Сводка

  • Настройте лист с адресами и фрагментами сообщения.
  • Напишите функцию для динамического диапазона и отправки писем.
  • Добавьте меню onOpen для простого запуска.
  • Улучшайте скрипт: HTML, вложения, логирование, валидация и обработка ошибок.

Важно: перед массовой рассылкой всегда тестируйте и проверяйте настройки безопасности и квоты.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как узнать устройства в Wi‑Fi через Nmap
Сеть

Как узнать устройства в Wi‑Fi через Nmap

Планирование питания с Eat This Much
Питание

Планирование питания с Eat This Much

Как предотвратить атаки Remote Access Trojan
Кибербезопасность

Как предотвратить атаки Remote Access Trojan

man в Linux: как читать и выходить
Linux

man в Linux: как читать и выходить

Как изменить звук уведомлений в iOS 17.2
iOS

Как изменить звук уведомлений в iOS 17.2

Обновление watchOS на Apple Watch — инструкция
Гайды

Обновление watchOS на Apple Watch — инструкция