Когда вы создаете статический веб-сайт, это означает, что вы не хотите управлять сервером или хотите сэкономить на расходах. Однако статический веб-сайт не может обрабатывать контактные формы, а это означает, что вам нужен внутренний сервер для обработки запросов контактных форм. Но если вам нужен сервер, то в чем логика создания статического сайта? Таким образом, простое решение - это бессерверные контактные формы.

Зачем переходить без сервера?

Создание бессерверных приложений дает множество преимуществ, но вкратце основные преимущества - это простота настройки, отсутствие управления и меньшая стоимость (бесплатно).

Выбор платформы

Есть много способов запустить бессерверный код, например aws lambda, облачные функции Google, облачные работники. Но я выбрал самый простой способ запустить бессерверный код, то есть облачные функции Google.

Google Cloud functions позволяет запускать функцию через HTTPS-запрос. Это также можно сделать с помощью лямбда aws, но для запуска функции необходимо дополнительно настроить шлюз API.

Расходы

Облако Google предлагает бесплатные 200 000 ГГц-секунд вычислительного времени, 5 ГБ исходящего интернет-трафика и 2 миллиона вызовов в месяц. Https://cloud.google.com/functions/pricing

Я использую среду выполнения 256 МБ / 0,4 ГГц, и обработка формы занимает ~ 800 мс.

Эта бесплатная квота слишком велика для отправки формы обратной связи.

0,4 x 0,8 с = 0,32 ГГц-секунды на вызов

200,000 / 0.32 = 625,000

Вы можете бесплатно обрабатывать 625 000 успешных форм в месяц *.

* Это всего лишь пример расчета и не включает стоимость электронной почты. На бесплатные ресурсы распространяются облачные политики Google.

Настраивать

Шаг 1. Создайте проект

(Если у вас нет облачной учетной записи Google, создайте ее, а затем создайте проект)

Шаг 2: Создайте функцию

Щелкните значок меню в левом верхнем углу. Прокрутите вниз и найдите Cloud Function в разделе COMPUTE.

Затем нажмите кнопку «Создать функцию».

Шаг 3. Заполните форму

Задайте имя функции (контактная форма).

Выделить память (256 МБ достаточно)

Установите триггер «HTTP» - он работает и для https.

Аутентификация не требуется, поэтому оставьте ее установленной, чтобы принимать неаутентифицированные запросы.

Исходный код может быть встроен или загружен ZIP-файл. Вы можете найти zip-файл здесь https://github.com/bansal-io/serverless-contact-form/tree/master/dist

Я выбрал здесь вариант встроенного редактора.

Шаг 4. Добавьте код в редактор

Откройте репозиторий https://github.com/bansal-io/serverless-contact-form

Скопируйте код файлов index.js и package.json и вставьте его на соответствующие вкладки редактора кода.

В поле "Функции" для выполнения введите onSubmit.

Шаг 5: установите переменные среды

Все переменные среды, относящиеся к SMTP, являются обязательными. Остальные переменные необязательны. Проверьте детали конфигурации https://github.com/bansal-io/serverless-contact-form/#configure

Нажмите кнопку «Создать», и ваша функция готова.

Примечание. Вместо установки переменных среды вы также можете изменить значения конфигурации в файле index.js.

Получить конечную точку http

После развертывания функции щелкните имя функции (контактная форма), затем вкладку «Триггер», чтобы найти URL-адрес.

Ваш URL будет выглядеть так.

https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME

Теперь вы можете установить этот URL-адрес в атрибуте действия в своей HTML-форме.

Вот рабочий пример контактной формы с облачной функцией Google https://serverless-contact-form.netlify.com/

Примечание. Этот код позволяет принимать запросы из любого домена. Чтобы ограничить это только своим доменом, вы также можете изменить значение 'Access-Control-Allow-Origin' с '*' на 'https: // your-website .com '.