Создайте простую бессерверную функцию для бесплатного сбора электронной почты от ваших пользователей без внешних инструментов

Прочтите быстрее здесь бесплатно, без учетной записи Medium: https://riccardogiorato.com/garden/2019/unlimited-newsletter/

Что мы собираемся построить?

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

Веб-сервисы, которые предоставляют вам возможность сохранять электронную почту, обычно ограничены 1 000 или 2 000 электронных писем с бесплатными уровнями, и мы легко решим эту проблему.

С нашей комбинацией мы будем получать до 125 000 новых писем каждый месяц бесплатно с использованием функций Netlify или аналогичных бессерверных хостинг-провайдеров.

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

Netlify также предлагает отправку форм, но только 100 основных отправок в месяц.

Стек технологий

  • Бесплатная служба баз данных PostgreSQL, например, от ElephantSQL или от Heroku.
  • Хостинг статических HTML-файлов для формы: Netlify или любой другой сервис, например GitHub Pages.
  • Хостинг бессерверных функций: Netlify или Zeit для нашей простой функции NodeJS для сохранения всех писем в базе данных.

Внутренний код

Мы собираемся сохранять электронные письма в базе данных - если вам нужна простая база данных с PostgreSQL, вы можете использовать уровень бесплатного пользования ElephantSQL.

Вы можете построить простую email_signup таблицу с помощью этого кода SQL:

Вам нужно будет где-то разместить эту бессерверную функцию node-simple. Предлагаю вам воспользоваться функциями Netlify.

Для кода мы собираемся использовать всего несколько базовых модулей, чтобы вы могли проверять действительность электронной почты без какого-либо внешнего API:

  • disposable-email-domains: это общедоступный модуль, который предоставляет вам полный список временных писем, чтобы пользователи не могли использовать одноразовые электронные письма.
  • pg: Официальный модуль для отправки данных в базу данных PostgreSQL в виде ЗАПРОСА
  • http и url: модули узлов для обработки URL-адреса из запроса и создания простого HTTP-сервера для получения HTTP-запросов с электронной почтой пользователя.

Не забудьте заменить connectionString URL-адресом подключения из вашей базы данных, в нашем случае из ElephantSQL.

Мы также предотвращаем SQL-инъекцию, используя подготовленные операторы со связанными параметрами в функции saveEmailDB:

  • const insertQuery = “INSERT INTO email_signup(email) VALUES($1)”;

С помощью этого запроса ваши пользователи не смогут отправлять какие-либо другие значения внутри этой команды SQL из-за привязки, установленной свойством VALUES.

Мы также обрабатываем различные ответы, такие как код состояния 403 с сообщением об ошибке, если пользователь отправляет временное электронное письмо или сообщение без домена после @.

Внешний код

Внешний код - это просто простая HTML-форма, но она отправит электронное письмо в нашу бессерверную функцию и отобразит сообщение, отправленное с сервера, внутри результирующего div.

Хорошо то, что сервер обрабатывает все, и вам не нужно обновлять интерфейсный код, а только сервер с другими сообщениями.