reCAPTCHAとは、Googleが提供するスパムメール防止ツール。お問い合わせフォームに「私はロボットではありません」というチェックボックスのやつ。WordPressはプラグイン「Contact Form 7」の設定から簡単に組み込みできますが、HTMLサイトはちょっと難しそうですよね?
そんな方におすすめな方法をご紹介します。
メールフォームCGIはシンプルで機能的な「POST-MAIL」を使用しますが、同様の機能があれば問題ありません。
reCAPTCHAのアカウントを作成
まずは「アカウント作成」から。以下のURLにアクセス。
https://www.google.com/recaptcha/about/
Googleアカウントでログインしたらメニューの「v3 Admin Console(今後v4やv5になっている可能性あり)」をクリック。
次のページ。「ラベル」は適当にサイト名でOK。
「reCAPTCHA タイプ」はv3でもv2でもOKですが、「私はロボットではありません」のチェックボックスと画像認証があった方が目に見えて分かりやすいのでv2で作成します。
ちなみにv3はAIが自動でbotがそうでないかを判断するのでチェックボックスすら表示されません。WordPressではv2が使えなくなったので、今後はv3に統一されると思われます。
「ドメイン」には組み込むサイトのドメインを入力。
同意のチェックボックスをクリック、アラートは送信しても送信しなくてOKです。
作成完了すると「サイトキー」と「シークレットキー」が発行されます。使うのはサイトキーのみ。
HTMLに追記
問い合わせフォームのHTMLに以下を追記。
<head>内
<script src="https://www.google.com/recaptcha/api.js"></script>
<form>内(送信ボタンの前とか)
<div class="g-recaptcha" data-sitekey="発行されたサイトキー"></div>
※divタグじゃなくてもspanでもpタグでもOK
POSTパラメータを必須項目にする
上記を追記してアップロードするとreCAPTCHAが組み込まれ、メールフォームにチェックボックスが表示されます。これだけではbotでも送信できてしまうので、ひと手間必要となります。
シークレットキーを使う方法などが正攻法ですが、CGIが分からない人が下手にいじるとエラーが出るのでおすすめしません。そこでreCAPTCHAから吐き出させるPOSTパラメータを使います。
reCAPTCHAの認証をクリアすると「g-recaptcha-response」という値に乱数時の文字列が生成されます。そこでPOST-MAILの「need(必須項目)」を使って「g-recaptcha-response」の値を必須項目にします。下記を<from>タグの直後に追加すればOK。
<input type="hidden" name="need" value="g-recaptcha-response">
こうすることで「g-recaptcha-response」が空だと送信できない状態、つまりreCAPTCHAの認証をクリアしないと送信できない状態となります。
なお、reCAPTCHAの認証は約2分間有効とのこと。
メールフォームCGIの修正
このままでも機能しますが、もうひと手間。init.cgiの「フォームのname値の置き換えをする場合」に以下を追記。
'g-recaptcha-response' => 'reCAPTCHA認証'
これでメールフォームの確認画面、また自動返信メールの項目名が変更されます。
ただ、生成された長い乱数時の消し方は分かりませんでした。(分かる人はコメントで教えて頂ければ幸いです)
記事のコメント
はじめまして
記事を拝見させていただきました。
非常に簡潔で分かりやすく、既存のメールフォームに手を加える自信が湧きました。
しかし、以下のエラーが出ます。
init.cgiの95行目において
# 最大受信サイズ(Byte)
# → 例 : 102400Bytes = 100KB
$cf{maxdata} = 102400 ;
上記、構文エラー
またpostmail.cgiにおいては、17行目
# 設定ファイル認識
require “./init.cgi”;
my %cf = &init;
上記、コンパイルエラー
さらに855行(どのファイルか不明)においてエラー
となりました。
ご迷惑でなければ、御教示願いたく送らせていただきました。
どうぞよろしくお願い申し上げます。