お問い合わせフォームが動かないときに見る順番

記事
IT・テクノロジー
「フォームから問い合わせたのに返事がない」と、電話で言われた。
自分で試すと送信完了の画面はちゃんと出る。でも受信箱には何も来ていない。

フォームの不具合は、原因の場所が3つに分かれます。
この3つは対処法がまったく違うので、順番に切り分けないと
直っていないのに直したつもりになります。

■ まず、3つの区間に分けて考える

送信ボタンから受信箱までの道のりは、次の3区間です。

区間1:ブラウザ → サーバー(そもそも送信されているか)
区間2:サーバー → メール送信(受け取ったサーバーがメールを送ったか)
区間3:送信 → 受信箱(届いて、目に入る場所に入ったか)

「送信完了画面が出た」は、区間1の成功しか意味しません。
区間2以降は画面に何も現れません。ここが誤解の元です。

■ ステップ1:区間1を確認する

開発者ツール(F12)のNetworkタブを表示したまま、送信してください。

送信時にリクエストが1本も飛ばない場合
JavaScriptのバリデーションで止まっています。Consoleタブの赤いエラーを見てください。
必須項目の未入力、メールアドレスの形式チェック、
reCAPTCHAの読み込み失敗が多いパターンです。

リクエストは飛ぶが、ステータスが200以外
・404 … 送信先のURLが違う。フォームの action 属性を確認
・403 … サーバーやWAFが弾いている
・500 … サーバー側の処理でエラー。エラーログを確認

ステータス200が返っているなら区間1は問題ありません。ステップ2へ。

■ ステップ2:区間2を確認する

ここで知りたいのは、サーバーが問い合わせ内容を受け取ったかです。
分かりやすいのは、送信内容をサーバー側に保存する仕組みを入れることです。
WordPressのContact Form 7なら、Flamingoプラグインで管理画面に保存されます。

・保存されている → サーバーは受け取っている。問題は区間2か3
・保存されていない → サーバーまで届いていない。ステップ1に戻る

この1点だけで、調べる範囲が半分になります。

保存されているのにメールが来ない場合は、送信処理を疑います。
PHPの mail() 関数は、サーバーの設定次第でエラーを返さずに何も送りません。
「送った」のに実際は送っていない、という状態が起こります。

対処はSMTP経由の送信に切り替えることです。
WordPressなら WP Mail SMTP などのプラグインで変更できます。
SMTPなら、送信の成否がログに残ります。

■ ステップ3:区間3を確認する

送信はされているのに届かない。ここからは迷惑メール判定の話になります。

いちばん多い原因は、差出人アドレスの設定です。

フォームの送信元(From)を、入力者のメールアドレスにしているケース。
よく見かけますが、現在の環境では推奨されません。
自分のサーバーから他社ドメインを名乗る形になり、なりすましと判定されます。

・From … 自分のドメインのアドレス(サイトのドメイン)
・Reply-To … 入力者のメールアドレス

Reply-Toを設定しておけば「返信」を押したときの宛先は入力者になるので、
運用は今までと変わりません。

そのうえで、ドメイン側の設定を確認します。

・SPF … そのドメインのメールを、どのサーバーが送ってよいかの宣言
・DKIM … 送信元が本物であることの電子署名
・DMARC … SPF/DKIMが通らなかったときの扱い

主要なメールサービスは、これらが未設定の送信元を厳しく扱います。
DNSのTXTレコードで設定するので、ドメイン管理会社かサーバー会社に確認してください。

■ 受信箱側も見る

・迷惑メールフォルダに入っている(まずここを見てください)
・受信フィルタで別フォルダに振り分けられている
・エイリアス宛で、転送設定が切れている
・メールボックスの容量が上限に達している
・退職者のアドレスが宛先に残り、宛先不明で弾かれている

「担当者が変わってから届かなくなった」というときは、ほぼこの範囲です。

■ やってはいけない対処

1. 自分のアドレス1つだけでテストして「届いたからOK」とすること

同じドメイン内・同じサーバー内のやり取りは、迷惑メール判定がゆるくなります。
自分に届くことは、他人に届く根拠になりません。

テストは系統の違㍆3か所に送ってください。Gmail、独自ドメイン、携帯キャリア。
携帯キャリア宛は判定がとくに厳しく、ここが通れば状況は良好です。

2. 原因が分からないままフォームを作り直すこと

区間3の問題でフォームを作り直しても、症状は変わりません。
送信元のサーバーとドメインは同じだからです。時間だけを消費して振り出しに戻ります。

3. 送信元を無関係のフリーメールアドレスにすること

「送信元をGmailにすれば通るのでは」という発想ですが、逆効果です。
サイトのドメインと差出人ドメインが一致しないことが、判定を悪くする要因です。

4. 自動返信メールだけで動作確認したことにすること

自動返信は入力者宛、通知メールは運営者宛で、宛先も経路も別です。
片方が届いても、もう片方の証明にはなりません。両方を見てください。

■ それでも解決しないとき

・SPF/DKIMを設定したはずなのに、まだ迷惑メールに入る
・特定のドメイン宛だけ届かない
・断続的に届いたり届かなかったりする

このあたりは、受信側が返すエラーメッセージを読まないと切り分けられません。
送信ログとヘッダー情報から判断する領域です。

私はお問い合わせフォームの調査と修正を承っています。
どの区間で止まっていたのかと、送信テストの結果を添えてお返ししています。

――
この記事の執筆には生成AIを活用しています。内容は実際の挙動を確認して書いています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す