Як автоматично надсилати email з Google Таблиць через Apps Script

8 хв читанняОновлено

Покрокова інструкція: MailApp.sendEmail у Google Apps Script, тригери за розкладом, персоналізація з рядків таблиці, ліміти й типові помилки.

Поділитись:TelegramX

Коротка відповідь

Google Apps Script вбудований у кожну Google Таблицю безкоштовно — не потрібен Zapier, Make чи n8n, якщо задача проста: прочитати рядок і надіслати лист. Функція MailApp.sendEmail(отримувач, тема, текст) робить це трьома рядками коду, а тригер за розкладом (Time-driven trigger) запускає її автоматично без участі людини.

Нижче — повний робочий приклад: скрипт, який перевіряє нові рядки в таблиці й розсилає персоналізовані листи лише тим, кому ще не надсилали.

Крок 1 — Підготувати таблицю

Створіть Google Таблицю з колонками, наприклад:

A: Email B: Ім'я C: Статус
ivan@example.com Іван (порожньо)
olena@example.com Олена (порожньо)

Колонка "Статус" потрібна, щоб скрипт не надсилав лист двічі одному й тому ж отримувачу.

Крок 2 — Відкрити редактор Apps Script

  1. У Google Таблиці: Розширення → Apps Script
  2. Відкриється окрема вкладка редактора коду, прив'язана саме до цієї таблиці

Крок 3 — Написати функцію розсилки

function sendEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  for (let i = 1; i < data.length; i++) { // i = 1, бо рядок 0 — заголовки
    const email = data[i][0];
    const name = data[i][1];
    const status = data[i][2];

    if (status === 'відправлено' || !email) continue; // вже надіслано або порожній рядок

    const subject = `Вітаємо, ${name}!`;
    const body = `Привіт, ${name}!\n\nЦе автоматичний лист із Google Таблиці.`;

    MailApp.sendEmail(email, subject, body);

    sheet.getRange(i + 1, 3).setValue('відправлено'); // позначити рядок як оброблений
  }
}

Ключові деталі синтаксису MailApp.sendEmail:

  • Базова форма: MailApp.sendEmail(recipient, subject, body)
  • Розширена форма з об'єктом опцій: MailApp.sendEmail(recipient, subject, body, options), де options підтримує cc, bcc, htmlBody (HTML-версія листа), attachments, name (відображуване ім'я відправника), replyTo
  • На відміну від GmailApp, MailApp не має доступу до самої поштової скриньки (не може читати листи) — тільки надсилає, тому вимагає менше дозволів при авторизації скрипта

Крок 4 — Перевірити вручну перед автоматизацією

  1. У редакторі Apps Script оберіть функцію sendEmails у випадаючому списку зверху
  2. Натисніть ▶ Виконати (Run)
  3. Google запросить авторизацію (дозвіл на надсилання листів від вашого імені) — підтвердіть один раз
  4. Перевірте, чи прийшов лист і чи колонка "Статус" оновилась на "відправлено"

Крок 5 — Налаштувати автоматичний тригер за розкладом

Щоб функція запускалась сама, без ручного натискання ▶:

  1. У редакторі Apps Script — іконка годинника зліва (Тригери / Triggers)
  2. + Додати тригер (Add Trigger)
  3. Функція для запуску: sendEmails
  4. Джерело події: Time-driven (за розкладом)
  5. Тип тригера за часом: наприклад "Timer hourly" (щогодини) або "Day timer" (раз на добу, обрати проміжок часу)
  6. Зберегти — Google ще раз попросить авторизацію саме для тригера

Після цього скрипт сам перевірятиме таблицю за вибраним розкладом і надсилатиме листи новим рядкам без вашої участі.

Ліміти й квоти, про які варто знати заздалегідь

Google Apps Script — безкоштовний, але з денними лімітами, які скидаються через 24 години після першого запиту в поточному періоді (не рівно опівночі):

Ліміт Особистий акаунт (Gmail) Google Workspace
Отримувачів email на добу 100 1500 (2000 у межах домену)
Час роботи тригерів за розкладом на добу 90 хвилин 6 годин
Максимум тригерів за розкладом на один скрипт 20 20
Час виконання одного запуску функції 6 хвилин 6 хвилин

Важлива деталь: ліміт рахує отримувачів, а не листи. Один лист на 50 адрес — це 50 з квоти. 50 листів по одній адресі — теж 50. Перевірити залишок квоти можна прямо в коді: MailApp.getRemainingDailyQuota().

Поширені помилки

Скрипт надсилає той самий лист повторно. Причина — немає колонки-позначки (як "Статус" у прикладі вище), тому кожен запуск тригера обробляє всі рядки заново. Рішення — завжди записувати ознаку "оброблено" в таблицю одразу після надсилання.

"Exceeded maximum execution time". Скрипт намагається обробити занадто багато рядків за один виклик і впирається в ліміт 6 хвилин на одне виконання. Рішення — обробляти рядки батчами (наприклад, по 50-100 за один запуск тригера) або використовувати LockService, щоб уникнути одночасного запуску двох копій скрипта.

Лист не приходить, хоча помилки немає. Найчастіша причина — вичерпана денна квота отримувачів (особливо на особистому Gmail-акаунті з лімітом лише 100/добу). Перевірте MailApp.getRemainingDailyQuota() перед розсилкою.

Авторизація "зникає" й тригер перестає працювати. Якщо змінити пароль Google-акаунта або відкликати доступи додатків, встановлені тригери деактивуються без явного попередження. Періодично перевіряйте вкладку Тригери на помилки виконання.

Коли Apps Script вже замало

Apps Script добре підходить, поки все відбувається всередині екосистеми Google (Таблиці, Gmail, Диск, Календар). Якщо потрібно підключити зовнішні сервіси (CRM, Telegram, платіжні системи) або будувати розгалужену логіку з умовами й повторними спробами — зручніше взяти no-code інструмент на кшталт n8n, Zapier чи Make, які мають готові інтеграції з тисячами сервісів. Різницю в підходах і цінах розібрано в порівнянні n8n, Zapier і Make.

Часті питання

Чи можна надсилати HTML-листи, а не звичайний текст?

Так, через об'єкт опцій: MailApp.sendEmail(email, subject, textBody, {htmlBody: "<h1>Привіт!</h1>"}). Поле body (текстова версія) залишається обов'язковим як fallback для поштових клієнтів, що не показують HTML.

У чому різниця між MailApp і GmailApp?

MailApp уміє лише надсилати листи й вимагає мінімум дозволів. GmailApp має ширші можливості — читання вхідних, робота з мітками й папками, пошук по листах — але вимагає більш чутливого дозволу на доступ до самої поштової скриньки. Для простої розсилки з таблиці MailApp — правильний і безпечніший вибір.

Чи спрацює тригер, якщо закрити вкладку з таблицею або вимкнути комп'ютер?

Так. Time-driven тригери в Apps Script виконуються на серверах Google, а не на вашому пристрої — вони працюють незалежно від того, чи відкрита таблиця, чи увімкнений комп'ютер.

Що робити, якщо потрібно надсилати більше 100 листів на добу?

Або підключити скрипт до акаунта Google Workspace (ліміт 1500/добу), або перейти на транзакційний email-сервіс на кшталт SendGrid чи Mailgun через UrlFetchApp замість MailApp, у яких ліміти рахуються інакше й масштабуються під бізнес-розсилки.


Дата останньої перевірки актуальності: 18 серпня 2026 р. Квоти Google Apps Script можуть змінюватись — перед плануванням розсилки звіряйтесь з офіційною сторінкою квот Google.

Схожі статті