実践ガイド

フォームは成功表示なのにメールが来ないときの切り分け

試行を繰り返す前に、一つのテスト送信がどこまで進んだか調べます。

要点。 サイトのリクエスト、Formgongの記録、確認済み受信者へのメール通知を分けて確認します。success: trueは受付の応答で、メール到着の証明ではありません。迷惑送信や未確認アカウント、Turnstileも調べてください。

Formgong·

サイトのフォーム 名前 Email メッセージ 送信 Formgong Telegram 新しい問い合わせ 名前 · Email 受信箱で開く +メール通知
デザインはサイト側に残し、受付と通知はFormgongに任せます。

受付・保存・通知は別の結果

お礼の表示は画面上だけで出せます。保存された記録と到着したメールは別の段階です。公開サイトで識別しやすいテストを送り、同じ送信を追いましょう。以下のコードはFormgong固有です。他サービスではそのドキュメントを参照します。

Networkで送信を探す

開発者ツールを開いて送信し、https://formgong.com/submitへのPOSTを探します。キー、フィールド、応答を確認してください。リクエストがなければボタンや送信処理を見直します。HTMLはactionとmethod、JavaScriptはfetchのURLを確認します。

応答を読んで成功を判断

Accept: application/jsonでJSONを求め、HTTPとsuccessを両方確認します。fetchが完了してもエラー応答の場合があります。通常のHTML送信はリダイレクトを受け取ります。例は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は許可ドメインの問題です。turnstile_missingやturnstile_failedはトークンを確認します。rate_limitedとlimit_exceededは異なる制限で、連打では解決しません。

送信中はボタンを無効にし、完了後に戻します。失敗してもメッセージを消さないでください。

対象フォームと迷惑送信を確認

サイトのキーに対応するフォームを開きます。botcheckが埋まると、成功に見える応答でも迷惑送信として保存され、通知されない場合があります。AI評価で迷惑送信を保留する設定なら、その判定も確認します。

記録があればメール設定へ

アカウントのメール確認、通知の有効化、受信者の確認を調べます。続いて迷惑メール、フィルター、転送設定を確認してください。

Telegramへの到着はメール側に原因を絞る手掛かりですが、メール到着の証明ではありません。訪問者への自動返信も別のメールです。

対策変更後に止まった場合

最新のsite keyとcf-turnstile-responseを使います。トークンは期限付きで一度だけ有効なので、再試行時にウィジェット更新が必要な場合があります。secret keyはブラウザーに入れません。

調査を続けるための記録

URL、時刻、HTTP状態、エラーコード、存在する場合は送信IDを残します。顧客情報や秘密キーは公開しないでください。修正したら全経路をもう一度確認します。

シンプルな接続はHTMLの例、別の通知先はTelegramガイドで設定できます。

よくある質問

success: trueはメール到着を意味しますか?

いいえ。リクエストが受け付けられたことを示し、通知の配信は別の処理です。

Telegramだけ届くのはなぜですか?

別々の通知経路だからです。メール通知、受信者確認、迷惑メールを調べてください。

botcheckでエラーにならないのはなぜですか?

Bot対策のため、成功に見せたまま迷惑送信として保存し、通知しない場合があります。

Turnstileの再試行はどうしますか?

新しいトークンを取得し、cf-turnstile-responseで送られることを確認します。使用済みトークンは再利用しません。

参考資料・ドキュメント

このガイドの公式資料: MDN: Fetch API, Cloudflare: Turnstile token validation. Formgongドキュメント, データの保存場所.

Markdownで読む
← ブログに戻る