BLOGブログ

Contact Form 7で「メッセージの送信に失敗しました」と出る原因と対処法|spam判定の見分け方とreCAPTCHAの確認ポイント

竹節 大輝 /

Web制作・ホームページ制作

WordPressのお問い合わせフォームでよく使われる「Contact Form 7」。送信ボタンを押したら「メッセージの送信に失敗しました。後でまたお試しください。」と表示されて、送れなくなったことはありませんか?

実はこのメッセージ、日本語の初期設定では 「メールの送信に失敗した」ときと「スパム(迷惑な送信)と判定された」ときで、まったく同じ文言 が表示されます。原因がちがうのに見た目が同じなので、どこを直せばいいのか迷いやすいのです。

この記事では、Cruwが自社サイトで新しく作ったお見積もりフォームで実際に起きた「スパム判定で送れない」不具合をもとに、原因の見分け方と直し方を紹介します。

この記事でわかること

  • 「送信に失敗しました」が、メール送信の失敗かスパム判定かを見分ける方法
  • スパム判定になる主な原因(reCAPTCHAなど)と確認ポイント
  • Cruwで実際に起きた原因と、直したコード

結論:まず「メール送信の失敗」か「スパム判定」かを見分ける

「メッセージの送信に失敗しました」の原因は、大きく次の2つです。

状態(status)意味主な原因
mail_failedメールを送る処理に失敗したサーバーのメール送信の設定、送信元アドレス、SMTPの設定など
spam送信内容がスパムと判定されたreCAPTCHAの確認に失敗、ページの古いキャッシュ、禁止ワード、Akismetなど

どちらなのかは、ブラウザの開発者ツールで、送信したときの通信の結果を見るとわかります。status が spam なら、メールの設定をいくら見直しても直りません。スパム判定の原因を探しましょう。

「送信に失敗しました」の原因を見分ける方法

方法1:ブラウザの開発者ツールで status を見る

いちばん確実な方法です。Google Chromeの場合の手順です。

  1. フォームのページを開き、右クリック →「検証」で開発者ツールを開く
  2. 「ネットワーク(Network)」タブを選ぶ
  3. フォームに入力して送信する
  4. 一覧に出てくる「feedback」という通信をクリックし、「レスポンス(Response)」を見る

次のような内容が表示されます。Cruwで実際に起きたときの結果です。

{
  "contact_form_id": 15041,
  "status": "spam",
  "message": "メッセージの送信に失敗しました。後でまたお試しください。",
  "invalid_fields": []
}

status が「spam」なので、メールの送信ではなく、スパム判定で止まっていることがわかります。メールの送信に失敗している場合は「mail_failed」と表示されます。

方法2:Flamingoでスパムの理由を見る

Contact Form 7の開発元が作っている「Flamingo」というプラグインを入れていると、スパムと判定された送信も保存されます。管理画面の「Flamingo」→「受信メッセージ」で、スパムに分類されたメッセージを開くと、なぜスパムと判定されたのか の理由も確認できます。

たとえば、reCAPTCHAが原因の場合は、次のような理由が記録されます。

  • reCAPTCHA response token is empty.(reCAPTCHAの確認用の文字列が空だった)
  • reCAPTCHA score (0.10) is lower than the threshold (0.50).(reCAPTCHAの点数が基準より低かった)

方法3:エラーメッセージの文言を変えておく

管理画面の「お問い合わせ」→ フォームの編集 →「メッセージ」タブでは、状況ごとの文言を変えられます。「送信がスパムと判定された」の文言を少し変えておくと、画面を見ただけでどちらの原因かがわかるようになります。

スパム判定になる主な原因と確認ポイント

1. reCAPTCHAのスクリプトが読み込まれていない(Cruwの事例)

Contact Form 7に reCAPTCHA(Googleの迷惑な送信対策)を設定していると、送信のたびに「人間が操作しているか」を確かめます。ページで読み込んだGoogleのスクリプトが確認用の文字列(トークン)を作り、フォームと一緒に送ります。

このスクリプトが読み込まれていないと、確認用の文字列が空のまま送られ、どんなにふつうに入力してもスパムと判定されます。

確認するには、フォームのページのソースを表示して、次の文字列があるか探します。

  • recaptcha/api.js(Googleのスクリプト)
  • _wpcf7_recaptcha_response(確認用の文字列を入れる欄)

確認用の欄はあるのに、recaptcha/api.js が見つからない場合は、何かがスクリプトの読み込みを止めています。

2. ページのキャッシュが古い

Contact Form 7は、送信が正しいページから行われたかを確かめるための情報をフォームに入れています。キャッシュ系のプラグインで古いページが表示され続けていると、この情報が古くなり、スパムと判定されることがあります。キャッシュを削除してから、もう一度試してみましょう。

3. 禁止ワード・Akismet

WordPressの「設定」→「ディスカッション」にある「コメント内で許可されないキーワード」に登録した言葉が送信内容に含まれていると、Contact Form 7でもスパムと判定されます。Akismetと連携している場合は、Akismetの判定でスパムになることもあります。

4. reCAPTCHAの点数が低い

reCAPTCHA v3は、操作の様子から0.0〜1.0の点数を付け、Contact Form 7は初期設定で 0.5より低いとスパム と判定します。VPNを使っている、短時間に何度も送信している、といった場合に点数が下がることがあります。

Cruwで実際に起きた原因:表示を軽くするための処理

Cruwでは、2026年9月にシステム開発用のお見積もりフォーム(新しいページ)を作ったところ、テスト送信がすべてスパムと判定されました。

調べてみると、テーマの functions.php に、次のような処理が入っていました。reCAPTCHAのスクリプトは少し重いため、フォームのないページでは読み込まないようにして、表示を速くする ための、よく使われる工夫です。

add_action( 'wp_enqueue_scripts', function () {
    $post = get_post();
    if ( ! $post ) {
        return;
    }

    // フォームのあるページでは、いつも読み込む
    if ( is_page( array( 'contact', 'estimate', 'recruit' ) ) ) {
        return;
    }

    // 本文に Contact Form 7 のショートコードがなければ、reCAPTCHA を読み込まない
    if ( ! has_shortcode( $post->post_content, 'contact-form-7' ) ) {
        wp_deregister_script( 'google-recaptcha' );
        wp_deregister_script( 'wpcf7-recaptcha' );
    }
}, 100 );

新しいお見積もりページは、フォームを本文ではなくテンプレート(PHPファイル)の中で表示していました。そのため「本文にショートコードがない」と判断されてスクリプトが外され、さらに例外のページの一覧にも入っていませんでした。

表示を軽くするための処理が、新しいフォームのページでreCAPTCHAを止めてしまっていた のが原因です。

直し方

例外のページの一覧に、新しいページを追加しました。

// テンプレートでフォームを出しているページでは、いつも reCAPTCHA を読み込む
if ( is_page( array( 'contact', 'estimate', 'estimate-system', 'recruit' ) ) ) {
    return;
}

修正後は、ページに recaptcha/api.js が読み込まれるようになり、問題なく送信できるようになりました。

同じことを防ぐために

ページの名前を一覧で書く方法は、ページを増やすたびに追加を忘れやすいのが弱点です。フォームを置くページが多いサイトでは、次のような方法も検討するとよいでしょう。

  • フォームのあるページのテンプレートに目印(カスタムフィールドなど)を付け、目印のあるページでは読み込む
  • フォームのページを作ったら、必ず一度テスト送信して、受信メールと自動返信メールが届くことを確かめる 手順を決めておく

特に2つ目は、どんな原因でも気づけるいちばん確実な方法です。

よくある質問

reCAPTCHAをやめれば、送信できるようになりますか?

送信できるようにはなりますが、おすすめしません。reCAPTCHAを外すと、ロボットによる迷惑な送信が届きやすくなります。原因(スクリプトが読み込まれていない、キャッシュが古いなど)を直して、reCAPTCHAは使い続けましょう。

status が mail_failed のときは、何を確認すればいいですか?

メールを送る仕組みの問題です。送信元のメールアドレスがサイトと同じドメインになっているか、サーバーのメール送信の設定やSMTPのプラグイン(WP Mail SMTPなど)の設定が正しいかを確認しましょう。

一部の人だけ送信できないと言われました

reCAPTCHAの点数が低くなる環境(VPNや、特殊なブラウザの設定など)からの送信が、スパムと判定されている可能性があります。Flamingoでスパムの理由を確認し、点数が原因であれば、電話など別の連絡方法も案内しておくと安心です。

まとめ

  • Contact Form 7の「メッセージの送信に失敗しました」は、メール送信の失敗 と スパム判定 で同じ文言になる。まず開発者ツールで status を見て、どちらかを見分ける
  • スパム判定の場合は、reCAPTCHAのスクリプトが読み込まれているか、キャッシュが古くないか、禁止ワードやAkismetの判定を確認する
  • Cruwの事例では、表示を軽くするためにreCAPTCHAを外す処理が、新しいフォームのページにも効いてしまっていた。フォームを作ったら、必ずテスト送信で確かめる

「フォームから問い合わせが届いていないかもしれない」「WordPressのサイトの不具合を調べてほしい」といったご相談も承っています。長野県上田市のCruwまで、お問い合わせからお気軽にご相談ください。ホームページの制作や運用については、ホームページ制作のページでも紹介しています。

/

GoogleのAI検索で「Cruwのブログ」を優先表示しませんか?

Googleの最新機能では、お気に入りのサイトを「優先するソース」として登録できるようになりました。登録していただくと、GoogleのAIモードやAI Overviewsが回答をつくる際、当サイトの情報を優先的に参照・表示してくれるようになります。

これからも地域ビジネスに役立つ最新のWebマーケティング情報を発信していきますので、ぜひ優先ソースへのご登録をお願いいたします!