# O formulário mostra sucesso, mas o email não chega

Descubra onde o envio parou: requisição, resposta, registro, spam, destinatário verificado ou Turnstile.

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

Separe a requisição da página, o registro no Formgong e a entrega ao destinatário verificado. success: true confirma aceitação, não chegada do email. Confira também spam, verificação da conta e problemas de Turnstile.

## Três resultados diferentes

O agradecimento pode ser apenas um estado da interface. O registro e o email recebido são outras etapas. Envie uma mensagem reconhecível no site publicado e acompanhe a mesma tentativa. Os códigos abaixo são do Formgong; em outro serviço, consulte a documentação correspondente.

## Procure a requisição em Network

Abra as ferramentas do navegador e envie o formulário. Procure o POST para `https://formgong.com/submit`, conferindo chave, campos e resposta. Sem requisição, revise o botão e o evento de envio. HTML usa `action` e `method`; JavaScript precisa da URL certa em `fetch`.

## Confira a resposta antes de mostrar sucesso

Peça JSON com `Accept: application/json` e valide HTTP e `success`. Fetch pode terminar com erro do servidor. Um POST HTML comum recebe redirecionamento. Use `try/catch` ao chamar o exemplo e mantenha os campos no erro.

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

## O código indica a próxima checagem

`unknown_access_key` aponta para a chave; `origin_not_allowed`, para o domínio. `turnstile_missing` e `turnstile_failed` indicam token ausente ou inválido. `rate_limited` e `limit_exceeded` são limites diferentes, não resolvidos por cliques seguidos.

Desabilite o botão durante a espera e reabilite-o ao terminar. Não apague a mensagem quando algo falhar.

## Examine também os registros de spam

Abra o formulário que corresponde à chave da página. Um `botcheck` preenchido pode produzir uma resposta aparentemente positiva e registrar spam sem avisos. Se a avaliação por IA retiver spam, confira essa classificação também.

## Se há registro, siga para os avisos

Confirme o email do proprietário e veja se as notificações desse formulário estão ativas. Confira o destinatário verificado, spam, filtros e encaminhamentos.

Uma mensagem no Telegram ajuda a isolar o canal de email, mas não comprova sua entrega. A resposta automática ao visitante é outra mensagem com configurações próprias.

## Depois de mudar a proteção

Atualize o código com site key e `cf-turnstile-response`. Tokens expiram e só funcionam uma vez; obtenha outro antes de repetir, se necessário. O secret key não entra no navegador. Teste o domínio publicado.

## Guarde o que ajuda a investigar

Anote URL, horário, status HTTP, código e ID do envio, quando houver. Não publique dados de clientes ou segredos. Após corrigir, teste todo o caminho.

O [exemplo HTML](/blog/html-contact-form-without-backend?lang=pt) oferece uma base simples, e o [guia de Telegram](/blog/website-form-to-telegram?lang=pt) explica outro canal.

## Perguntas frequentes

### success: true confirma o email?

Não. O Formgong aceitou a requisição; a entrega da notificação é uma etapa separada.

### Por que Telegram chega e email não?

Os canais são independentes. Confira notificações, destinatários verificados e spam.

### Por que botcheck não mostra erro?

É uma armadilha para bots: o envio pode parecer correto e virar spam sem notificações.

### Como tentar novamente com Turnstile?

Obtenha um token novo e confira seu envio em cf-turnstile-response. Não reutilize um já consumido.

## Fontes e documentação

- [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/)
- [Documentação do Formgong](https://formgong.com/docs?lang=pt)

[Obter uma chave](https://formgong.com/?lang=pt#top)
