# Formularz pokazuje sukces, ale email nie dociera — co sprawdzić

Znajdź etap, na którym zatrzymuje się zgłoszenie: żądanie, odpowiedź API, zapis, spam, potwierdzenie odbiorcy i powiadomienia.

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

Oddziel trzy pytania: czy strona wysłała żądanie, czy Formgong zapisał zgłoszenie i czy kanał email ma potwierdzonego odbiorcę. success: true nie oznacza dostarczenia listu. Sprawdź również spam, weryfikację konta i błędy Turnstile.

## Jedna wiadomość, trzy punkty kontroli

Napis „Dziękujemy” może powstać wyłącznie w interfejsie. Zapisane zgłoszenie to kolejny etap, a email jeszcze następny. Użyj rozpoznawalnej wiadomości testowej, by nie pomylić ich wyników.

Poniższe kody dotyczą Formgong. Przy innej usłudze zachowaj tę kolejność kontroli, lecz sprawdź jej własne odpowiedzi i ustawienia.

## Czy przycisk wywołuje wysyłkę

Otwórz narzędzia przeglądarki i kartę Network, po czym wyślij formularz. Znajdź POST na `https://formgong.com/submit`. Sprawdź adres, `access_key`, pola i odpowiedź.

Brak żądania wskazuje na obsługę przycisku lub formularza. HTML potrzebuje prawidłowego `action` i `method`; JavaScript właściwego URL w `fetch`.

## Nie uznawaj samego fetch za sukces

Do odpowiedzi JSON użyj `Accept: application/json` i sprawdzaj zarówno HTTP, jak i `success`. Formularz wysłany klasycznie dostaje przekierowanie. Przykładową funkcję wywołaj w obszarze `try/catch`; po błędzie zachowaj pola.

```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;
}
```

## Odpowiedź często wskazuje następny krok

`unknown_access_key` wymaga sprawdzenia klucza; `origin_not_allowed` dozwolonych domen. `turnstile_missing` i `turnstile_failed` dotyczą tokena ochrony. `rate_limited` oraz `limit_exceeded` oznaczają różne ograniczenia, których nie naprawisz szybkimi ponowieniami.

Na czas wysyłki zablokuj przycisk, a po zakończeniu odblokuj go. Informacja o błędzie ma pomóc w ponownej próbie, nie usuwać napisanej wiadomości.

## Poszukaj zapisu także w spamie

Wybierz formularz odpowiadający kluczowi ze strony. Sprawdź jego zgłoszenia oraz spam. Wypełnione `botcheck` może dać pozornie poprawną odpowiedź, ale zatrzymać powiadomienia.

Jeśli używasz oceny AI z wstrzymywaniem spamu, sprawdź też ten status. To mechanizm osobny od samego przyjęcia żądania.

## Gdy zgłoszenie istnieje, przejdź do poczty

Potwierdź email właściciela konta. W ustawieniach właściwego formularza sprawdź włączenie powiadomień oraz zweryfikowany adres odbiorcy. Następnie przejrzyj spam, filtry i przekierowania skrzynki.

Zgłoszenie w Telegramie pomaga zawęzić problem do poczty, lecz nie potwierdza jej dostawy. Automatyczna odpowiedź dla odwiedzającego to również osobna wiadomość.

## Błąd po dodaniu Turnstile

Odśwież kod integracji: potrzebny jest aktualny site key i `cf-turnstile-response`. Tokeny wygasają i są jednorazowe, więc ponowna próba może wymagać odświeżenia widżetu. Secret key nie powinien trafiać do przeglądarki.

## Zachowaj informacje do dalszej diagnozy

Zapisz adres strony, czas testu, status HTTP, kod błędu i ID zgłoszenia, jeśli istnieje. Nie publikuj danych klienta ani sekretów. Po naprawie wykonaj pełny test ponownie.

Do podłączenia od początku służy [przykład HTML](/blog/html-contact-form-without-backend?lang=pl); dodatkowy kanał opisuje [poradnik Telegrama](/blog/website-form-to-telegram?lang=pl).

## Pytania i odpowiedzi

### Czy success: true oznacza dostarczony email?

Nie. Potwierdza przyjęcie żądania, a dostawa powiadomienia jest osobnym etapem.

### Dlaczego Telegram działa, a poczta nie?

Kanały są niezależne. Sprawdź włączone emaile, potwierdzonych odbiorców i spam w skrzynce.

### Dlaczego botcheck nie zwraca błędu?

To pułapka dla botów: żądanie może wyglądać poprawnie, lecz zostać zapisane jako spam bez powiadomień.

### Jak ponowić wysyłkę z Turnstile?

Uzyskaj nowy token i sprawdź jego przesłanie w cf-turnstile-response. Nie używaj ponownie zużytego tokena.

## Źródła i dokumentacja

- [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/)
- [Dokumentacja Formgong](https://formgong.com/docs?lang=pl)

[Pobierz klucz formularza](https://formgong.com/?lang=pl#top)
