wordpress

Contact Form 7の「スパムログ: reCAPTCHA の応答トークンが空です。」の対処法

こんにちは、みぞれ(@xxmiz0rexx)です。

ある日、古いバージョンのままになっていたContact Form 7のバージョンをあげたら、スパムじゃないのに「メッセージの送信に失敗しました。後でまたお試しください。」というオレンジ枠のエラーメッセージが表示され一切のメールが送れなくなりました。

一応解決したので記事に残します。どこをググってもヒットしなかったので誰かの役に立つと良いな。。

プラグインのバージョンを下げるのはナシ

よく検索でヒットする解決法の中に「Contact Form 7のバージョンを5.1に下げましょう」というのがあるんですが、それだとスパム被害に遭ってる場合に意味がないのですよ。。

Contact Form 7は改良が加えられてバージョンが上がっている訳なので、死ぬほど急いでいる訳ではない限り根本を解決しておきたいところですよね。

「スパムログ: reCAPTCHA の応答トークンが空です。」について公式の見解

このメッセージはFlamingoという受信箱プラグインでスパムログを見たときに表示されるものなのですが、それが何故表示されるのかという質問に対し、公式はこう回答しています。

空の reCAPTCHA トークンはいくつか異なった理由により発生します。よくある理由の一つは reCAPTCHA のスクリプトファイルがロードされていないか、あるいは誤動作しているというものです。これはほとんどの場合作りがいいかげんなテーマが原因です。

Contact Form 7公式サイト

作りがいいかげんやと😂😂😂😂😂😂
こちとら丁寧に作り上げた完全自作テーマじゃ!!!!!!(怒)

さらに、リリースのお知らせを見るとこんな記述もありました。

もし 5.1.1 へのアップグレード後にそのような状況に陥ったなら、使用しているテーマが適切に JavaScript を各ページのフッター部分にロードしているかどうかを確認しましょう。

wp_footer() の呼び出しを不適切に削除してスクリプトのロードを阻害するテーマの存在が知られています。これはテーマ開発における最悪の慣行の一つであり、上に説明したような問題を確実に引き起こします。あなたのテーマでこのような問題が見られる場合はテーマ作者に修正を求めてください。

Contact Form 7公式サイト

いやちゃんとwp_footer()も記述してるし!!!!
じゃあ何でなの?!?!?!

「スパムログ: reCAPTCHA の応答トークンが空です。」になってしまった原因

という訳で今回の事件の真相ですが、私の場合はサイトスピードを上げようと思って行った以下のfunctions.phpへの記述が問題になっていました。

functions.php
//scriptを非同期
if (!(is_admin() )) {
function add_async_to_enqueue_script( $url ) {
    if ( FALSE === strpos( $url, '.js' ) ) return $url;
    if ( strpos( $url, 'jquery.min.js' ) ) return $url;
    return "$url' async charset='UTF-8";
}
add_filter( 'clean_url', 'add_async_to_enqueue_script', 11, 1 );
}

コメントアウトする事で、無事メールが送れるようになりました。まさかこれが原因だったなんて…。いいかげんどころか、サイトを改善したくてやったことだったのですが、Googleのいうことを聞き過ぎましたかね。。

これでも直らない場合

私のようにこういった記述をしていないのに、もしくはコメントアウトしたのにメールが送れない場合は、こちらのブログに他の解決法が載っているので参考になるかもしれません。

【reCaptcha V3】Contact form 7 5.1.1でメール送信不可【全てスパム判定】

最後に

という訳で、『Contact Form 7の「スパムログ: reCAPTCHA の応答トークンが空です。」の対処法』でした。

世界のどこかの誰かの役に立てたら幸いですw