WordPress : ContactForm7でフリーメールを弾く

functions.phpに以下のように記述する。コピペでも可。

/**
 * ContactForm7でフリーメールを弾く
 */
function wpcf7_validate_email_reject_freemail($result,$tag){
  $tag = new WPCF7_FormTag( $tag );
  $freemails = array(
    'gmail.com',
    'yahoo.co.jp',
    'msn.com',
    'hotmail.co.jp',
    'hotmail.com',
  );
  $email = isset ($_POST[$tag->name]) ? trim($_POST[$tag->name]) : '';
  if(!empty($email)){
    foreach($freemails as $freemail){
      if(preg_match("/@" . preg_quote($freemail) . "$/ui",$email)){
        $result->invalidate ($tag, 'フリーメールはご利用頂けません。'); 
        break;
      }
    }
  }  
  return $result;
}
add_filter('wpcf7_validate_email', 'wpcf7_validate_email_reject_freemail', 11, 2);
add_filter('wpcf7_validate_email*', 'wpcf7_validate_email_reject_freemail', 11, 2);

freemails 配列にフリーメールドメインを格納し、ContactForm7で入力されたメールアドレスをフリーメールドメインかチェックし、1つでもマッチすれば送信を中断してエラー文を返す作りですね。

参考元: Contact Form 7 のメールアドレス入力欄でフリーメールを拒否設定したいです