Создайте простую бессерверную функцию для бесплатного сбора электронной почты от ваших пользователей без внешних инструментов
Прочтите быстрее здесь бесплатно, без учетной записи 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.
Хорошо то, что сервер обрабатывает все, и вам не нужно обновлять интерфейсный код, а только сервер с другими сообщениями.