コンタクトフォームを海外のスパムメールに利用されないようにする方法

お問い合わせ用にコンタクトフォームを使用していると、海外からのスパムメールやフォームを悪用されて会社のお問い合わせ用のメールアドレスからスパムメールを送ったように偽装され悪用されるケースあります。

特に後者のお問い合わせ用のメールアドレスから送ったように偽装されるとGoogleにスパムメールを送るドメインと認識されてしまうことがあり、そのドメイン(メールアドレス)から送られたメールがすべて迷惑メールのフォルダに入ってしまうこともあります。

www.xserver.ne.jp

実際に弊社でも悪用されてドイツなどのヨーロッパ地域の言語で「スパムメールを解除しろ!」と言ったメールが増えてきた為、調べるとコンタクトフォームを悪用されていたようです。

コンタクトフォームを悪用されないようにするには

コンタクトフォームからスパムメール送ったり、悪用したりする人たちのほとんどが日本語圏以外の人が多いので、コンタクトフォームから日本語以外で送信できないようにすれば、ある程度解決できます。

functions.phpにコードを追加する

functions.phpに下記のコードを追加します。

//スパム対策(Contact Form7用)
function wpcf7_validate_anti_spam_message( $result, $tag ) {
	$value = str_replace(array(PHP_EOL,' '), '', esc_attr($_POST['your-message']));
	if (!empty($value)) {
		if (preg_match('/^[!-~]+$/', $value)) {
			$result['valid'] = false;
			$result['reason'] = array('your-message' => '日本語で入力してください');
		}
	}
	return $result;
}
add_filter( 'wpcf7_validate', 'wpcf7_validate_anti_spam_message', 10, 2 );

内容は「メッセージ本文に日本語が含まれないとエラーメッセージ(「日本語で入力してください」の部分)が出て送信できないようにするコードです。

ずる賢い奴は「日本語で入力してください」の部分を理解して、少しの日本語を混ぜてくる可能性もあるので、「エラーの為送信できません」でもいいかもしれません。