【保存版】Contact Form 7で「送信できない」時の原因と解決チェックリスト

【保存版】Contact Form 7で「送信できない」時の原因と解決チェックリスト WordPress

送信ボタンを押しても反応しない、赤いエラーが出る、送信完了と出るのにメールが届かない――Contact Form 7(CF7)の「送信できない」問題は、原因が多岐にわたるため特定が難しいトラブルの一つです。

この記事では、症状を3つに分類して、それぞれの原因と解決方法をチェックリスト形式で解説します。上から順に確認していけば、最短で原因にたどり着けます。

スポンサーリンク

最初にやること:症状を3つに分類する

まず、どのパターンに該当するかを確認してください。

症状 原因の場所 該当セクション
ボタンが反応しない・ずっと読み込み中 フロントエンド(JavaScript) ケース1
赤枠エラー・「送信に失敗しました」 サーバー(REST API / 設定) ケース2
送信成功だがメールが届かない メール配信 ケース3

ケース1:送信ボタンが反応しない・ずっと読み込み中

ボタンを押しても何も起きない、またはスピナーが回り続ける場合は、JavaScriptのエラーが原因です。

チェック1:ブラウザのコンソールでJSエラーを確認する

ブラウザで問い合わせページを開き、F12Console タブを確認します。

// よくあるエラー例
Uncaught TypeError: Cannot read properties of undefined
wpcf7 is not defined
$ is not a function

これらのエラーが出ている場合、テーマや他のプラグインのJavaScriptがCF7のスクリプトと競合しています。

対処法

  • テーマを一時的にデフォルトテーマ(Twenty Twenty-Four等)に切り替えて動作確認
  • プラグインを1つずつ無効化して原因を特定

チェック2:JS最適化プラグインとの競合

AutoptimizeWP RocketLiteSpeed Cache などのJS最適化(結合・遅延読み込み・defer/async付与)が、CF7の依存関係を壊していることがあります。

対処法

  • 最適化プラグインの設定で、以下のスクリプトを最適化対象から除外する
wp-content/plugins/contact-form-7/
wpcf7
recaptcha

チェック3:ページキャッシュが原因

キャッシュされたページでは、CF7のセキュリティトークン(nonce)が古くなり、送信が開始できません。

対処法

チェック4:reCAPTCHAの読み込み失敗

reCAPTCHA v3を使用している場合、スクリプトの読み込みがブロックされると送信が開始できません。

対処法

  • F12 → Network タブで recaptcha のリクエストが 200 で返っているか確認
  • 広告ブロッカーを無効化してテスト
  • CSP(Content Security Policy)ヘッダーで google.com/recaptcha が許可されているか確認

ケース2:赤枠エラー・「送信に失敗しました」が表示される

送信処理は動くがエラーになる場合は、サーバー側の問題です。

チェック1:パーマリンクを再保存する(最も多い解決策)

CF7はWordPressのREST API(/wp-json/contact-form-7/v1/contact-forms/ID/feedback)を使って送信します。このエンドポイントが壊れると送信に失敗します。

対処法

  1. WordPress管理画面 → 設定パーマリンク
  2. 何も変更せずに「変更を保存」をクリック
  3. これだけで .htaccess が再生成され、REST APIが復活することが多い

チェック2:REST APIがブロックされていないか確認

ブラウザで以下のURLに直接アクセスして、JSONが返るか確認します。

https://あなたのサイト/wp-json/

404や403が返る場合、REST APIがブロックされています。

よくある原因

  • セキュリティプラグイン(SiteGuardWordfenceAll In One WP Security)がREST APIを制限している
  • サーバーのWAF(Web Application Firewall)がブロックしている
  • .htaccess にREST APIを無効化するルールが入っている

対処法

  • セキュリティプラグインの設定で REST API を許可する
  • サーバーのWAF設定で /wp-json/contact-form-7/ を除外する
  • .htaccess に以下のようなブロックルールがないか確認する
# この記述があるとREST APIがブロックされる
RewriteRule ^wp-json/ - [F,L]

チェック3:「メッセージの送信に失敗しました」のエラー

このメッセージが表示される場合、メール送信自体が失敗しています(REST APIは正常)。

対処法

  • CF7の「メール」タブで送信先アドレスが正しいか確認
  • 送信元(From)にサイトのドメインと一致するメールアドレスを設定する
  • サーバーのPHP mail() 関数が使用可能か確認する

チェック4:reCAPTCHA v3のスコアで弾かれる

reCAPTCHA v3は「人間らしさ」のスコア(0.0〜1.0)で判定します。スコアが閾値未満だとスパム判定されて送信に失敗します。

対処法

  • reCAPTCHAの閾値を下げる(デフォルト0.5 → 0.3など)
  • reCAPTCHA v2(「私はロボットではありません」チェックボックス)に変更する
  • reCAPTCHAを外してテスト送信し、原因がreCAPTCHAかどうか切り分ける

チェック5:ファイル添付の制限

ファイル添付フィールドがある場合、以下の制限に引っかかることがあります。

設定 確認場所 推奨値
許可する拡張子 CF7のフォーム編集画面 jpg|png|pdf|doc|docx
ファイルサイズ上限 CF7のフォーム編集画面 limit:10mb
upload_max_filesize php.ini / サーバー設定 10M以上
post_max_size php.ini / サーバー設定 upload_max_filesizeより大きく

チェック6:WAF / ModSecurity の誤検知

フォームの本文に特定のキーワードやHTMLタグが含まれると、WAFがリクエストをブロックすることがあります。

確認方法:本文を「テスト」の1語だけにして送信。通る場合はWAFの誤検知が原因です。

対処法

  • サーバーのWAF設定で /wp-json/contact-form-7/v1/ を除外する
  • エックスサーバーの場合:サーバーパネル → WAF設定 → 該当ルールをOFFにする

ケース3:送信成功だがメールが届かない

「ありがとうございます。メッセージは送信されました。」と表示されるのにメールが届かない場合は、メール配信の問題です。

チェック1:フォーム自体が動作しているか確認する

Flamingo プラグインを使っている場合、WordPress管理画面の「Flamingo」→「受信メッセージ」に送信データが記録されているか確認します。記録があれば、フォームは正常に動作しており、メール配信だけが問題です。

チェック2:SMTPプラグインを導入する(最も効果的)

WordPressのデフォルトのメール送信(PHP mail()関数)は、迷惑メール判定されやすく到達率が低いです。

対処法:SMTPプラグインを導入してメール配信を改善します。

  • WP Mail SMTP(最も人気)
  • Post SMTP Mailer(ログ機能が充実)

SMTPの送信元には、自分のドメインのメールアドレス(例:info@あなたのドメイン.com)を設定してください。GmailやYahooメールを送信元にすると、SPF認証に失敗して迷惑メールに分類されます。

チェック3:SPF / DKIM / DMARC を設定する

メールの認証設定が不備だと、受信サーバーがメールを拒否または迷惑メールフォルダに振り分けます。

設定 役割 設定場所
SPF 送信元IPの正当性を証明 DNSのTXTレコード
DKIM メールの改ざんを検知 DNSのTXTレコード
DMARC SPF/DKIMの認証ポリシー DNSのTXTレコード

エックスサーバーを使用している場合、サーバーパネルからSPF/DKIMを設定できます。

チェック4:迷惑メールフォルダを確認する

受信者側の迷惑メールフォルダに振り分けられている場合があります。

確認すべきこと

  • Gmail / Yahoo / Outlook の迷惑メールフォルダ
  • 企業メールの場合、社内メールフィルタの設定
  • CF7の「メール」タブで、送信先アドレスが正しいか

チェック5:CF7のメールタブの設定を見直す

項目 推奨設定
送信先(To) 受信したいメールアドレス
送信元(From) サイト名 <info@自ドメイン.com>
返信先(Reply-To) [your-email](ユーザーのメールアドレス)

注意:送信元(From)にユーザーのメールアドレス([your-email])を使うと、SPF認証に失敗します。Fromは自ドメインのアドレスにして、Reply-Toにユーザーのメールを設定するのが正しい運用です。

本番環境だけ失敗する場合

CDN / リバースプロキシの影響

Cloudflare などのCDNを使用している場合、コンタクトページと /wp-json/ のキャッシュ設定を確認してください。

対処法:Cloudflareのページルールで以下を設定

  • example.com/contact/ → キャッシュレベル: バイパス
  • example.com/wp-json/* → キャッシュレベル: バイパス

URL の不一致(www / 非www、HTTP / HTTPS)

WordPress設定のURLとアクセスURLが異なると、REST APIへのリクエストがクロスオリジン扱いになり失敗します。

確認:WordPress管理画面 → 設定 → 一般 で「WordPressアドレス」と「サイトアドレス」が一致しているか確認します。

10分でできる最短チェックリスト

上から順番に試すだけで、ほとんどのケースが解決します。

  1. パーマリンクを再保存する(設定 → パーマリンク → 変更を保存)
  2. ブラウザのキャッシュをクリアして再送信テスト
  3. F12 → Console でJSエラーがないか確認
  4. F12 → Networkfeedback リクエストのHTTPステータスを確認
  5. ページキャッシュ / JS最適化を一時停止してテスト
  6. reCAPTCHAを一時的に外してテスト
  7. セキュリティプラグインを一時無効化してテスト
  8. SMTPプラグインを導入してメール配信を改善

デバッグに便利な設定

原因が特定できない場合は、WordPressのデバッグモードを有効にしてエラーログを確認します。

// wp-config.php に追加
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

エラーログは wp-content/debug.log に出力されます。CF7やメール送信に関するPHPエラーが記録されるので、原因特定に役立ちます。

注意:デバッグ確認後は必ず WP_DEBUGfalse に戻してください。本番環境でデバッグモードを有効にしたままにすると、エラー情報が蓄積されてディスクを圧迫したり、セキュリティ上のリスクになります。

まとめ

症状 最も多い原因 最初に試すこと
ボタンが反応しない JS競合 / キャッシュ F12でConsole確認 + キャッシュクリア
赤枠エラーが出る REST APIブロック パーマリンク再保存
成功するがメール届かない PHP mail() の到達率 SMTPプラグイン導入

解決のポイント

  • CF7の問題はフロント(JS)→ サーバー(REST API)→ メール配信の3層に分けると早い
  • 最初にパーマリンク再保存キャッシュクリアで土台を整える
  • メールが届かない場合はSMTPプラグインの導入が最も効果的
  • 送信元(From)は自ドメインのメールアドレスにし、Reply-Toでユーザーアドレスを設定する

あわせて読みたい