WordPress

【contact form7】英語のスパムメールを防ぐ方法

spam

 

こんにちは、こうへいです。

最近、当ブログのコンタクトフォームから、英語のスパムメールが届くようになり、どうにかしたいなーと思って実装してみました。

下記のような感じです。

contactform

 

「メールきてるなー」と思いつつも件数が少なくて無視していたのですが、あまりに件数が多くなってきたのでいよいよ対策しないといけなくなりました。

今回は、サクッと忘備録的な記事ですが、「contact form7を使ってる」という人は是非ご覧ください。

 

contact form7から日本語でしか送信できないようにする

そもそも言語でブロックしたらいいのでは?と思って、色々調べてみました。

どうやら、フィルターフックでカスタムバリデーションを使えばいけそうだったので、日本語文字列が入力されていた場合のみ値を送信し、そうでなければ警告メッセージを表示させるようにできます。

 

参考サイト

 

//-- Contact Form 7 英語のみの投稿は送信不可

add_filter('wpcf7_validate_textarea', 'ktzw3', 10, 2);
add_filter('wpcf7_validate_textarea*', 'ktzw3', 10, 2);

function ktzw3($result, $tag)
{
    $name = $tag['name'];
    $value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';

    if ($value !== '' && !preg_match('/[ぁ-ん]/u', $value)) {
        $result['valid'] = false;
        $result['reason'] = array($name => '日本語で入力してください');
    }

    return $result

 

 

実際の画面はこんな感じです。

コンタクトフォーム

 

見事に「日本語で入力してください」と怒られました。

これでスパムメールが僕のメールボックスを埋め尽くすことはなくなり、スッキリです。

 

簡単ですが、今回は以上です。