# Форма не надсилає листи: як знайти причину

Форма показує успіх, а листа немає? Перевірте відповідь API, збережену заявку, підтвердження пошти, отримувачів, спам і Turnstile.

Author: Formgong
Published: 2026-10-01
Language: uk
Canonical: https://formgong.com/blog/contact-form-not-sending-email?lang=uk

Якщо форма показує успіх, але листа немає, перевірте три етапи: чи надіслано запит із сайту, чи збережено заявку, чи ввімкнений поштовий канал із підтвердженим отримувачем. У Formgong також перевірте спам, підтвердження email та відповідь Turnstile. success: true підтверджує приймання запиту, а не потрапляння листа у вашу скриньку.

## Три різні результати, які не варто плутати

«Успішно» на сайті, запис у базі та лист у пошті — різні події. Повідомлення може бути намальоване JavaScript ще до відповіді сервера. Сервер може прийняти запит, а сповіщення — чекати перевірки адреси або бути відфільтрованим поштою.

Перевіряйте цей шлях послідовно: запит із браузера, збережену заявку, потім канал сповіщень. Зробіть одну впізнавану тестову заявку на опублікованому сайті. Це дасть спільний орієнтир для всіх перевірок.

Нижче конкретні кроки для Formgong. Принцип працює й для інших сервісів, але назви помилок та налаштування потрібно звіряти з їхньою документацією.

## 1. Чи сайт справді надсилає запит

Відкрийте інструменти розробника браузера, вкладку Network («Мережа»), і надішліть форму. Знайдіть POST на `https://formgong.com/submit`. Перевірте адресу, поле `access_key`, передані дані та відповідь.

Якщо запиту немає, проблема в обробнику форми або кнопці: сам стан «дякуємо» нічого не надсилає. Якщо адреса інша, перевірте, який сервіс насправді обробляє форму. Для звичайного HTML дивіться `action` і `method`; для JavaScript — URL у `fetch`.

Для JSON-запиту вкажіть `Accept: application/json`. Нативна HTML-форма після приймання отримує перехід, а не JSON. Не обробляйте ці два варіанти як однакову відповідь.

## 2. Показуйте успіх після перевірки відповіді

Для JavaScript перевірте HTTP-статус і `result.success === true`. Саме завершення `fetch` не означає успіх: він може повернути відповідь із помилкою. Нижче функція для обробника форми; замініть ключ і обгорніть виклик у `try/catch`.

```javascript
// Call from your form's submit handler inside try/catch.
// Keep the entered fields when the request fails.
async function sendContactForm(form) {
  const response = await fetch("https://formgong.com/submit", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Accept: "application/json",
    },
    body: JSON.stringify({
      ...Object.fromEntries(new FormData(form)),
      access_key: "fk_your_access_key",
    }),
  });
  const result = await response.json();
  if (!response.ok || result.success !== true) {
    throw new Error(result.message || "Submission failed");
  }
  // Accepted by Formgong; this is not email-delivery confirmation.
  return result.id;
}
```

## Які помилки шукати у відповіді

**unknown_access_key**
Ключ не належить жодній формі. Скопіюйте його заново з «Підключення сайту».

**origin_not_allowed**
Домен не проходить налаштований список дозволених доменів. Перевірте реальний і preview-домени.

**turnstile_missing / turnstile_failed**
Відсутній або неприйнятний токен Turnstile. Оновіть код віджета та отримайте свіжий токен.

**rate_limited / limit_exceeded**
Перевищено короткочасне обмеження запитів або місячний ліміт. Повторювати багато запитів поспіль не допоможе.

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

## 3. Перевірте запис і статус спаму

Відкрийте «Заявки» потрібної форми в Formgong і знайдіть тестове повідомлення. Перевірте також спам. Якщо ви випадково заповнили приховане `botcheck`, запит може виглядати успішним, але повідомлення буде позначене як спам і не надіслане.

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

## 4. Перевірте підтвердження, канал і отримувачів

- Підтвердьте пошту власника акаунта. До підтвердження нормальні заявки можуть бути утримані.

- У налаштуваннях email цієї форми перевірте, що сповіщення ввімкнені.

- Перевірте адресу потрібного отримувача та її підтвердження. Додана, але непідтверджена адреса ще не є адресою доставки.

- Перевірте папки «Спам», «Усі листи», фільтри й переадресацію пошти.

Якщо заявка є в інбоксі та Telegram, це допомагає звузити пошук до поштового каналу. Це ще не доказ, що лист потрапив у поштову скриньку отримувача. Автоматична відповідь відвідувачу також є окремим листом із власними налаштуваннями.

## Якщо проблема виникла після ввімкнення Turnstile

Формі потрібно передати `cf-turnstile-response`, а сервісу — перевірити його. Віджет сам по собі недостатній. Turnstile-токен одноразовий і має строк дії: для повторної спроби може знадобитися оновлення віджета.

Скопіюйте актуальний приклад із «Підключення сайту» після зміни налаштувань захисту. Перевірте саме опублікований домен. Не вставляйте secret key Turnstile в браузер; у коді сайту використовують site key.

## Що зібрати, якщо причина лишилася незрозумілою

Збережіть URL сторінки форми, час тесту, HTTP-статус та код відповіді. Якщо відповідь містить ID заявки, збережіть і його. Не публікуйте дані реального клієнта, токени чи секретні ключі у зверненні.

Для додаткового каналу скористайтеся [інструкцією Telegram](/blog/website-form-to-telegram?lang=uk). Якщо форма ще не підключена, почніть із [робочого HTML-прикладу](/blog/html-contact-form-without-backend?lang=uk) або [налаштування Lovable](/blog/lovable-contact-form-email-telegram?lang=uk). Після виправлення повторіть тест і перевірте весь шлях до сповіщення.

## Питання та відповіді

### Чи success: true означає, що лист доставлено?

Ні. Це відповідь про приймання запиту Formgong. Доставка сповіщення відбувається окремо; спам або утримання до підтвердження пошти також впливають на неї.

### Чому заявка є в Telegram, але не на пошті?

Це окремі канали. Перевірте ввімкнення поштових сповіщень, підтвердження потрібного отримувача та папку «Спам» у його пошті.

### Чому заповнений botcheck не показує помилку?

Це honeypot для ботів. Запит може виглядати успішним, але зберігатися як спам без сповіщень. Людина має залишати це приховане поле порожнім.

### Що робити після помилки Turnstile?

Перевірте актуальний site key і передачу cf-turnstile-response. Отримайте свіжий токен для повторної спроби: токени одноразові та мають строк дії.

## Джерела та документація

- [MDN: Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
- [Cloudflare: Turnstile token validation](https://developers.cloudflare.com/turnstile/get-started/server-side-validation/)
- [Документація Formgong](https://formgong.com/docs?lang=uk)

[Отримати ключ](https://formgong.com/?lang=uk#top)
