WordPressが半ば強制的にWordpress 5.xにVersion Upされて、お問い合わせページで使っているContact form7もVersion 5.1にアップデートとなり、その結果、Contact form7で使っているGoogle reCaptchaもV2からV3にアップデートするしかなくなりました。
reCaptchaをV2からV3に上げた時にreCAPTCHAのアイコンが常に表示される変更があり、それがかなりウザいので消す方法を以下の記事に書きました。
参照:Google reCAPTCHA v3のアイコンを消す方法
その後、Contact form7 + reCaptcha V3の組み合わせで、こちらのサイトでは特に問題が出ていなかったのですが、別のサイトでContact form7からメールが送れないという報告を頂きました。
自分で確認してみると、メールの内容に関係なく全てスパム判定されて全くメールが送れない状況でした。
これはマズイだろということで、この記事では、Contact form7 5.1.1でreCaptchaからスパム判定されてメールが送れない状況の回避方法について一通り調べてみたので、対策をまとめています。この記事を読めば、スパム判定を回避してContact form7でメール送信できるようになります。
<script src="https://www.google.com/recaptcha/api.js" async="" defer=""></script>
上記の対策は、Javascriptの非同期読み込みを設定していると、reCaptchaのjsが動作しないことへの対策です。その辺の設定をしている人はJavascriptの非同期読み込みそのものを一度OFFにしてみると原因が分かるかもしれません。
Contact form7 5.1.1でスパム判定問題が起きた
Luxeritasでは問題ないがCocoonではスパム判定問題が発生
今回のスパム判定問題はLuxeritasでは起きず、Cocoonだけでおきました。つまり、テーマ依存のプラグインとテーマの組み合わせで起きる不具合です。この手の不具合はテーマ側とプラグイン側の問題の切り分けが面倒でなかなか収束しません。
Contact form7 スパム判定問題が発生する組み合わせ
問題が起きたのは、Wordpressテーマ CocoonとContact form7を組み合わせているサイトです。
- WordPress 5.0.3
- Cocoon 1.6.0
- Contact Form7 5.1.1 ( + reCaptcha V3 )
この組み合わせだと、Contact form 7からメール送信するときに全てスパム判定されて、オレンジ色の囲みで以下のメッセージが出ます。
内容を変えたり色々試してみたのですが、送信する内容によらず、全てスパム判定されているようでした。
そもそもContact Form7 5.1.1とは何か?
変更点
reCAPTCHA: 中身のない応答トークンへの対処を変更。reCAPTCHA v3 を使っているウェブサイトの一部において 5.1.1 で行われた変更の副作用的な影響をこうむることが予想されます。そのようなケースでは、フォーム送信後毎回、オレンジ色の枠線に囲まれた応答メッセージを見ることになるでしょう。
オレンジの枠線は reCAPTCHA のようなスパム対策モジュールによってスパムらしい活動が検出されたことを示しています。オレンジの枠線を毎回目にするというのは、あなたが本物のスパムボットだというのでもない限り、明らかに異常なことです。
もし 5.1.1 へのアップグレード後にそのような状況に陥ったなら、使用しているテーマが適切に JavaScript を各ページのフッター部分にロードしているかどうかを確認しましょう。
wp_footer() の呼び出しを不適切に削除してスクリプトのロードを阻害するテーマの存在が知られています。これはテーマ開発における最悪の慣行の一つであり、上に説明したような問題を確実に引き起こします。あなたのテーマでこのような問題が見られる場合はテーマ作者に修正を求めてください。
Contact Form7を5.1.1にすると、
- オレンジ色のスパム判定(reCAPTCHA)のメッセージが毎回出る可能性がある
- そして、その状況になるかどうかは使用しているテーマに依存
ということです。
Contact form7 5.1.1のスパム判定の回避手順
5.1.1を使い続ける場合の対策は
- reCAPTCHAを使うのをやめる
- テーマを修正または変更する
となります。
reCaptchaを使用しない
reCaptcha v3を使用しないのであれば、Contact form7 5.1.1を使用しても問題なくメールを送信できます。そもそもスパム判定が原因で、その判定をreCaptchaがしているのですから使用をやめればスパム判定もしなくなるというわけです。
reCaptchaを使わないのは、使う時に設定したインテグレーションを削除すればよいだけです。
この方法は、そもそもreCaptchaを使っていたという人からすればあまり意味のある対策ではありません。
そもそも5.1.1をリリースした目的がreCAPTCHAのスパム判定を強力にするための変更だったはずですから、『reCAPTCHAを使うのをやめる』という選択肢はないでしょう。
テーマを修正または変更することで対応
『テーマを修正または変更することで対応』するしかありませんが、Cocoonがwp_footer()を不適切に削除しているテーマとも思えないし実際wp_footer()はあります。プラグイン側の指摘内容と実情が合わないので、それ以上、具体的に何をどうしたらよいのかわからないです。テーマ開発者に報告しても取り合ってくれる可能性も低そうで、こちらも簡単に対応できるように思えません。
Contact form7 5.1.1の使用をやめる
そもそも5.1.1のリリース目的がスパム判定を厳しくして、スパム撃退するということだったので、スパムが来ていない場合は、5.1.0で十分のはずです。
ですので、5.1.1の使用をやめて5.1.0にバージョンダウンすることで、reCaptcha v3との組み合わせで問題は起きなくなります。
reCaptcha v3はイヤだ、reCaptcha v2を使用したいというならばreCaptcha v2に対応していた最終バージョン5.0.5にバージョンダウンするしかありません。
Contact form7の5.1.0(古いバージョン)のダウンロード方法
こちらのサイトにアクセスして、古いバージョンを選んでダウンロードします。
今回の場合は5.1をダウンロードします。
Contact form7 プラグインのバージョンダウン
FTPなどで古いバージョンをアップロードして上書きする。
この方法は昔ながらの方法ですが、
- ファイルが多いとアップロードするのも大変
- ファイルの増減があると辻褄が合わなくなる
- 操作を間違えるとやり直しがきかない
のであまり好きじゃないです。
既にインストールされているプラグインを一度削除して、新規インストール
この方法はWordpressの管理画面から操作できるので、簡単ですし、間違いがありません。
この方法は今までの設定などが消えてしまいますがContact form7のフォームをデフォルト状態で使っているのであれば影響はないと思います。
古いプラグインの更新通知を止める
Contact form7のバージョンを5.1にバージョンダウンしても、更新の通知が出てしまいます。
更新の通知が常に出ていると気になりますし、間違って更新してしまうと同じ作業をする必要がありますので、特定のプラグインだけ更新通知が来ないように設定しておきます。
function.phpに以下の記述を追加するとcontact form 7の更新通知が来なくなります。
add_filter('site_option__site_transient_update_plugins', 'filter_hide_update_notice');
function filter_hide_update_notice($data) {
if (isset($data->response['contact-form-7/wp-contact-form-7.php'])) {
unset($data->response['contact-form-7/wp-contact-form-7.php']);
}
}
まとめ
このサイトの場合、Contact form7は問い合わせ用にとりあえず設置しているだけです。実際に使われる機会はあまりないです。そもそもContact form7というプラグインは、ほとんどバージョンアップしないイメージで、枯れたプラグインという認識で、あまり問題が起きるイメージはありませんでした。
今回のようにWordpressのメジャーバージョンアップや、reCaptcha v2->v3への変更など大きな修正があると、意外にもメールが送れなくなるという現象に出くわし、トラブルシュートに結構時間を取られたのは盲点でした。
趣味のサイトならまだいいですが、商業サイトの場合はお問い合わせフォームはお客さんとの大事な接点ですから、メール送信できなくなるのは大きな機会損失になります。
Contact form 5.1.1が爆弾バージョンであることは覚えておいた方が良いでしょう。
そもそも、Contact form7のreCaptcha対応バージョンがv3のみとなっているのも不親切ですし、さらにv5.1.1でスパム判定の問題が起きるのがわかっていても最新版としてリリースしてしまっている以上、更新通知が来たらアップデートしてしまう人は結構多いと思います。これだけ利用者が多いプラグインですからリリース方法やreCaptcha のバージョン対応の多様化は考えられてしかるべきだと思いました。
Contact form7の代わりのプラグインが無いのではなく、無料でContact form7と同じ機能を持つプラグインが無いということなので、有料であれば選択肢は結構あると思います。