function wpcf7_text_validation_filter( $result, $tag ) {
/* Array of free email domains */
$FREE_DOMAINS = array('gmail.com', 'yahoo.com', 'hotmail.com');
$type = $tag['type'];
$name = $tag['name'];
$_POST[$name] = trim( strtr( (string) $_POST[$name], "\n", " " ) );
if ( 'text*' == $type ) {
if ( '' == $_POST[$name] ) {
$result['valid'] = false;
$result['reason'][$name] = wpcf7_get_message( 'invalid_required' );
}
}
if ( 'email' == $type || 'email*' == $type ) {
$arr = explode( '@', $_POST[$name] );
if( ! empty( $arr[1] ) ){
$domain = strtolower( trim( $arr[1] ) );
} else {
$domain = false;
}
if ( 'email*' == $type && '' == $_POST[$name] ) {
$result['valid'] = false;
$result['reason'][$name] = wpcf7_get_message( 'invalid_required' );
} elseif ( '' != $_POST[$name] && ! is_email( $_POST[$name] ) ) {
$arr = explode( '@', $_POST[$name] );
$result['valid'] = false;
$result['reason'][$name] = wpcf7_get_message( 'invalid_email' );
} elseif ( $domain && in_array( $domain, $FREE_DOMAINS ) ) {
$result['valid'] = false;
$result['reason'][$name] = wpcf7_get_message( 'invalid_email' );
}
}
return $result;
}