Google Apps Script, который раз в запуск проверяет входящие в Gmail по whitelist отправителей и шлёт уведомления о новых письмах в Telegram.
- Ищет в
inboxписьмаnewer_than:1dот адресов изSENDER_WHITELIST. - Игнорирует письма, в которых
Fromсодержит ваш собственный email (анти-эхо, чтобы не получать уведомления о собственных отправлениях). - Отправляет в Telegram сообщение с темой, отправителем, датой и сниппетом
тела (до
SNIPPET_CHARSсимволов) + inline-кнопкой «Открыть в Gmail». - Хранит метку времени последнего успешно обработанного письма в
PropertiesService.getScriptProperties()под ключомLAST_PROCESSED_TS, чтобы не дублировать уведомления при повторных запусках.
.
├── mail-check.gs # единственный файл скрипта
├── .gitignore
└── README.mdВсё, что не в mail-check.gs, — это инфраструктура репозитория. Сам код
GAS живёт в Google, репозиторий хранит только исходник.
- Откройте script.google.com, создайте проект.
- Скопируйте содержимое
mail-check.gsв редактор (либо привяжите проект черезclasp— см. ниже). - Замените в коде:
MY_EMAIL— ваш Gmail, на который приходят письма.SENDER_WHITELIST— список адресов/паттернов отправителей.- При желании —
NEWER_THAN_DAYS,SNIPPET_CHARS.
- В Project Settings → Script Properties добавьте секреты:
TG_BOT_TOKEN— токен Telegram-бота (получить у@BotFather).TG_CHAT_ID— ID чата, куда слать уведомления (можно узнать черезhttps://api.telegram.org/bot<TOKEN>/getUpdates).
- В разделе Triggers добавьте триггер на функцию
checkInbox— например, раз в 5–15 минут (Time-driven).
Важно. Секреты хранятся в Script Properties и не коммитятся. Код читает их через
PropertiesService.getScriptProperties().getProperty(...).
-
Через редактор GAS: выберите функцию
checkInbox→ Run. -
Через
clasp:clasp push # залить код clasp run checkInbox # запустить функцию
Если хотите редактировать код локально и пушить его в GAS:
npm install -g @google/clasp
clasp login
clasp create --type standalone --title "Gmail Notifier"
# вставьте scriptId из .clasp.json в свой проект, затем:
clasp pushФайл .clasp.json создаётся автоматически и содержит scriptId +
rootDir — в репозиторий его коммитить безопасно, но если у вас в нём
личные token/oauth — добавьте в .gitignore.
- Триггеры GAS не срабатывают чаще, чем раз в минуту; разумный интервал —
5–15 минут, чтобы не упираться в квоту
UrlFetchApp. GmailApp.searchвозвращает максимум 50 тредов за вызов — текущий лимит зашит в коде. Если писем больше, инкрементальный курсор (LAST_PROCESSED_TS) всё равно отработает корректно.- При первом запуске
LAST_PROCESSED_TS = 0, и в Telegram уйдут все письма за последниеNEWER_THAN_DAYSдней, подходящие под whitelist. Если это нежелательно — один раз установитеLAST_PROCESSED_TSвручную через Script Properties на нужный unix-timestamp.
Используйте как угодно.