ホームページのお問い合わせなどのフォームから届く営業メール等の迷惑メール対策について、有効だと言われているのが「ハニーポット」と呼ばれる方法です。
ハニーポットとは、画面には見えないひっかけ用の入力欄をフォーム内に仕込んで、機械的に送られる迷惑メールをブロックする方法です。
ほとんどの迷惑メールは自動送信プログラムなどで自動的に送られてきます。
そして、これらのプログラムは入力欄の全項目を埋めようとするため、ひっかけ用の入力欄に何か入力された場合、迷惑メールとしてブロックできます。
この記事では、【Contact Form 7】でお問い合わせフォームを作っている場合の、ハニーポットの方法を記載します。
【Contact Form 7】には、「Honeypot for Contact Form 7」という専用のプラグインがあるので、手軽に導入したい方はそちらを使った方がいいかもしれません。
私は、プラグインをむやみに増やしたくないので、手動でのやり方にしました。
ハニーポット導入の流れ【Contact Form 7】
①問い合わせフォーム内に入力欄を追加
②CSSで①のフォームを非表示
③制御するコードを追加
内容:①のフォームに入力がある場合、問い合わせを送信しない
④【強化版】ハニーポットを複数設置
⑤【強化版】制御するコード
①問い合わせフォーム内に入力欄を追加
迷惑メール対策をしたいフォームに入力欄を追加する。
<div class="contact-wrap">
<label> 会社名
[text company] </label>
</div>
フォーム欄の[name]に当たる値(ここでは「company」)は、現状のフォームで使用していないもので、重要度が高そうなものにしてください。
(例:company,title,urlなど)
②CSSで①のフォームを非表示
①にて追加した部分を表面上では見えなくします。
.contact-wrap {
position: absolute;
left: -9999px;
}
[display:none;] や [opacity:0;] は、機械的に見た場合に認識されなくなる可能性もあるので、画面上で見えない位置に置くのがいいと思います。
③制御するコードを追加
「functions.php」に以下のコードを追加します。
//コンタクトフォーム対策
add_filter( 'wpcf7_validate', 'cf7_honeypot_validation', 10, 2 );
function cf7_honeypot_validation( $result, $tags ) {
// honeypot フィールド名
$honeypot_fields = array(
'company',//ここに①のnameの値を入れる
);
foreach ( $honeypot_fields as $field ) {
if ( isset( $_POST[ $field ] ) && $_POST[ $field ] !== '' ) {
$result->invalidate(
new WPCF7_FormTag( array(
'name' => $field,
'type' => 'text'
) ),
''
);
// これ以上処理しない
return $result;
}
}
return $result;
}
これで、①の入力欄に値が入った場合にはエラーになり、メールが送信されなくなります。
ここで一応、制御できているかテストを行ってください。
(普通に入力した場合はお問い合わせメールが送られてくるか、①の入力欄に値が入った場合はメールが送られないか)
④【強化版】ハニーポットを複数設置
より迷惑メール対策を強化するには、ハニーポットを複数設置するのが有効です。
①をフォーム内に複数追加します。
⑤【強化版】制御するコード
複数のハニーポットを制御するためのコードは以下になります。
「functions.php」を書き換え
//コンタクトフォーム対策
add_filter( 'wpcf7_validate', 'cf7_honeypot_validation', 10, 2 );
function cf7_honeypot_validation( $result, $tags ) {
// honeypot フィールド名
$honeypot_fields = array(
'company',//ここに①のnameの値を入れる
'○○',//ここに①のnameの値を入れる
'△△',//ここに①のnameの値を入れる
);
foreach ( $honeypot_fields as $field ) {
if ( isset( $_POST[ $field ] ) && $_POST[ $field ] !== '' ) {
$result->invalidate(
new WPCF7_FormTag( array(
'name' => $field,
'type' => 'text'
) ),
''
);
// これ以上処理しない
return $result;
}
}
return $result;
}
注意点
ハニーポットは、あくまでも自動入力による迷惑メールを対策するものです。
手動入力による営業メールは対策できません。
手動入力による営業メールを対策する場合には、例えばフォームの注意書きに「営業目的でのお問い合わせはお断りします」という文言を記載することや、「営業目的ではない」といったチェック項目を追加する、などが有効かと思います。
「MW WP Form」の場合のハニーポットのやり方については、後日記載予定です。

