Contact Form 7 の送信エラーは、JavaScriptオフが原因かも

タイトルの通りなのですが、WordPressのメールフォームプラグイン「Contact Form 7」のメール送信が失敗する原因が、公式サイトや検索で見つかるブログ記事とは違うものだったので、備忘録として残しておきます。

先に結論から言うと、メールフォームにスパム防止のために reCAPTCHA を設定している場合、ユーザーがJavaScriptオフの状態でフォームの送信を行うと送信に失敗します
対策は、ユーザーにJavaScriptをオンにしてもらうしかありません。

送信エラーの原因はさまざま


先日、私が制作したウェブサイトを運用されているお客様から「メールフォームからの送信に失敗するというクレームが来たので調べてほしい」という連絡がありました。
ただ、そのクレームの前後でフォームからメールが届いているので、フォーム自体がおかしいわけではないようだとのことでした。

まずは「Contact Form 7」の公式サイトに情報が無いか探してみます。
すると下記の記述がありました。

2つのケースが考えられます。ひとつはメールサーバにおいて実際に問題が発生していて、そのためメールが送信できなかったケースです。この場合、エラーメッセージは赤色のボーダーラインで囲まれています。サーバー管理者に問い合わせてください。

もうひとつは、フォーム送信にスパムの疑いがあると判断されたケースです。この場合、エラーメッセージはオレンジのボーダーラインで囲まれています。

フォームを送信すると「メッセージの送信に失敗しました」というエラーメッセージが表示されます。何が悪いのですか? | Contact Form 7 [日本語]
https://contactform7.com/ja/faq/after-submitting-the-form-i-get-an-error-message/

エラーメッセージのボーダーラインの色はわからないということでしたので、それぞれのケースで確認してみます。

メールサーバーに問題がないか?

ネット上の記事には「WP Mail SMTP」による対策の記事が多くありましたが、今回はクレームの前後で送信に成功しているので当てはまりません。

お客様のウェブサイトを設置しているレンタルサーバーの障害情報を見てみると、ちょうど送信に失敗した時間帯に障害が起きていたのですが、収容サーバー番号が異なっていましたので、こちらも当てはまらないようです。

スパムと判断されていないか?

次にスパムと判断されているかどうかを調べるのですが、これには「Flamingo」というプラグインが役立ちます。
「Flamingo」は、「Contact Form 7」の作者である三好さんが公開されているメッセージ保存プラグインです。

このプラグインを有効にしておくと、メールフォームから送信されたメッセージを保存して、WordPressの管理画面上で検索・閲覧することができます。
送信時に保存されますので、サーバートラブルや設定ミスのために送信に失敗したメッセージも保存されます。
さらに、スパムと判断されたメッセージも保存しておくことができます。

お客様のWordPressにはFlamingoをインストールしてありましたので、管理画面からFlamingoの受信メッセージ画面を開き、スパムメッセージの一覧を表示させます。
すると、送信エラーとなったメッセージと思われるものが見つかりましたので、開いてみます。

メッセージの詳細が表示されます。

ここでセレクトフィールドの値が初期値のままだったりしたら、おそらくスパムです。
しかし、該当するメッセージはすべてのフィールドが正しく入力されていました。

ところが、右サイドバーに表示されたステータスは「スパム」となっていました。

人間が普通に入力したメッセージがスパムと判断される理由

ステータスが「スパム」となっている場合、その下のスパムログに理由が表示されています。

今回は「reCAPTCHAの応答トークンが空です」という理由です。
このエラーに関して Contact Form 7 のFAQに言及があります。

“スパムログ: reCAPTCHA 応答トークンが空です。” これはどういう意味ですか?

このメッセージは Flamingo プラグインの受信メッセージ画面に表示されたものでしょう。これが意味するのは、reCAPTCHA モジュールがこのメッセージをスパムと判定したが、その理由は本来何か値を持つはずの応答トークンの値が空白だったからだ、ということです。

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

reCAPTCHA v3 に関する FAQ | Contact Form 7 [日本語]
https://contactform7.com/ja/faq-about-recaptcha-v3/

ちょっとこの書き方はひどいですね・・・

なお今回の場合、クレームの前後は動作していますからスクリプトファイルはロードされているし、テーマの作りがいい加減なわけでもありません!
となると、クレームとなったユーザーに問題があって動作していない可能性が高いです。

そこで、reCAPTCHAが正しく動作しない状況を調べてみたところ、JavaScriptをオフにしていると動作しないという記事をいくつか見つけました。

試しに自分でもJavaScriptオフで送信してみたところ、送信エラーとなり、Flamingoで確認するとスパム判定されていました。

対策は注意喚起しかない?

かつてはハッキング被害を防ぐためやブラウザの動作を軽くするためにJavaScriptをオフにすることを推奨されている時期がありましたが、現在ではJavaScriptオフではページが正しく表示されないことも多く、ハッキングはブラウザやOSのアンチウイルス機能である程度防ぐことができます。

しかし、今でも安全のためにJavaScriptをオフにしている人が数パーセントおられますので、その方々からの問い合わせを取りこぼさないようにする必要があります。
ただ、reCAPTCHAは非常に優秀で、その数パーセントの方のためにオフにするのはデメリットのほうが大きくなります。
(現に今回問い合わせのあったお客様のウェブサイトは、reCAPTHAによって1日に30件以上スパム判定していて、該当のメッセージを除いてスパムでないものは含まれていませんでした)

対策としては、Contact Form 7 の各フォームのメッセージ設定で、「送信がスパムと見なされた」のメッセージを「メッセージの送信に失敗しました。JavaScriptがオフの場合はオンにしてページを再読み込みしてから、再度お試しください」と記載しておくのがいいでしょう。

JavaScriptがオフの時はフォームを無効にするといったこともできますが、そこまでする必要は無いかなと思います。

コメントを残す