un tronc
ホームページ制作

Contact Form 7 でメールアドレスのドメインを制限する|Gmail・Google Workspace だけ受け付ける

こんにちは!アントロンのNaokoです。

フォームに注意書きを書いたのに、条件と違う内容で送られてきて、あとから「入れ直してください」と連絡する。そんな手間はありませんか?

フォームを作ると、こんなことで困ります。

  • 注意書きを書いても、読まずに送られたら受け付けてしまう
  • 受け付けたあとで「使えないので入れ直してください」と連絡するのは手間がかかる
  • フォームの設定に、入れられる中身を絞る項目が見当たらない

untronc.jp でも、2026年10月8日に AI講座「AI導入支援 秘書をひとつ動かす90分」の申し込みフォームを作ったとき、テスト送信で同じことが分かりました。

講座では、受講する方の Google アカウント(Gmail・Google カレンダー・Google ドライブ)を Claude につなぎます。そのため、「講座で使うメールアドレス」の欄は Google アカウントに限りたいと考えました。欄の下には「Google のアカウント(Gmail、または Google Workspace の独自ドメイン)に限ります。」と注意書きを置いていました。

ところが、同じ日に私がテスト送信すると、この欄に mac.com(Apple のメール)のアドレスを入れても送信が通り、通知メールも届きました。注意書きを置いても、入力は止まりません。

結論から書くと、送信ボタンを押したときにアドレスを確かめる小さなファイルを足して、Gmail と Google Workspace 以外のアドレスでは送信が止まるようにしました。ファイルは Claude Code(AI に作業を頼めるアプリ)に書いてもらい、サーバーに上げるのは私がしました。

解決の考え方:送信のときに、アドレスのドメイン(@ の後ろ)を確かめる

注意書きは、読んでもらえれば役に立ちます。ただ、入力そのものを止めることはできません。止めるには、送信ボタンが押されたときに入力を確かめて、条件に合わなければ欄の下にエラーメッセージを出す必要があります。

確かめるのは、メールアドレスの @ の後ろ(ドメイン)です。

  • @ の後ろが gmail.com なら、Gmail のアドレス
  • それ以外なら、そのドメインのメールをどこが受け取っているかを調べる。Google が受け取っていれば Google Workspace のアドレス

この2段階で確かめることにしました。

やったこと1:Contact Form 7 の設定を見た

フォームは Contact Form 7(WordPress のフォームのプラグイン)で作っています。まず、メールアドレスの欄の設定に、ドメインを絞る項目があるかを確かめました。

Contact Form 7 のメールアドレス入力項目フォームタグジェネレーターの画面。項目タイプ・項目名・クラス属性・長さ・デフォルト値の欄があり、ドメインを絞る項目は無い

メールアドレス入力項目フォームタグジェネレーター(欄を作る画面)には、ドメインを制限する項目がありませんでした。選べるのは、必須にするか・項目名・長さ・デフォルト値などです。設定だけでは絞れないので、別の方法で確かめることになりました。

つまずき:Google Workspace のアドレスは、形では見分けられない

Gmail だけなら、@ の後ろが gmail.com かどうかを見れば済みます。手間がかかるのは Google Workspace(会社や個人のドメインで Gmail を使うサービス)のほうです。

Google Workspace のアドレスは「info@自分の会社.jp」の形をしています。アドレスの形だけでは、Gmail を使っているかどうかが分かりません。

見分ける手がかりになるのが、ドメインの MX レコード(そのドメイン宛てのメールを、どこのサーバーが受け取るかを書いた設定)です。Google の Google Admin Toolbox Dig(ブラウザで誰でも使える、ドメインの設定を調べるページ)で、名前にドメインを入れて「MX」を押すと、EXCHANGE の欄に受け取るサーバーの名前が出ます。

Google Admin Toolbox Dig で mac.com の MX を調べた画面。EXCHANGE は mx01.mail.icloud.com

mac.com は mx01.mail.icloud.com でした。Apple のサーバーが受け取っています。

Google Admin Toolbox Dig で google.com の MX を調べた画面。EXCHANGE は smtp.google.com

Google のメールを使っているドメインの例として google.com を調べると、smtp.google.com でした。Google Workspace 管理者ヘルプにも「Google Workspace の MX レコードの値は smtp.google.com です。」と書かれています(出典:Google Workspace の MX レコードを設定する)。

つまり、MX レコードに書かれた受け取るサーバーが Google のものなら、そのドメインは Google のメールを使っていると判断できます。

やったこと2:Claude Code に、確かめるファイルを書いてもらった

Claude Code に頼んで、送信のときに「講座で使うメールアドレス」の欄だけを確かめる小さなファイルを書いてもらいました。私が FTP(サーバーにファイルを送る仕組み)で wp-content/mu-plugins/ というフォルダに上げています。

Must-Use プラグイン(mu-plugins)は、このフォルダに置くだけで自動で動き、管理画面からは止められないプラグインです。止めたいときは、ファイルを消せば元に戻ります(出典:WordPress「Must-Use Plugins」)。

判定の中身は次のとおりです。

  • @ の後ろが gmail.com・googlemail.com なら通す
  • それ以外は MX レコードを調べ、受け取るサーバーの名前が google.com か googlemail.com で終わるなら通す(Google Workspace)
  • どれでもなければ、欄の下に「Google のアカウント(Gmail、または Google Workspace の独自ドメイン)のメールアドレスを入れてください。」とエラーメッセージを出して送信を止める
  • 空の入力や、メールアドレスの形になっていない入力は、Contact Form 7 の標準の入力チェックに任せる
  • 対象は、このフォームの「講座で使うメールアドレス」の欄(項目名 course-email)だけ

使ったコードです。

<?php
/**
 * AI講座の申し込みフォームで、
 * 「講座で使うメールアドレス」(course-email)を Google のアカウントだけ通す。
 */
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

add_filter( 'wpcf7_validate_email*', 'untronc_validate_course_email', 20, 2 );

function untronc_validate_course_email( $result, $tag ) {
	if ( 'course-email' !== $tag->name ) {
		return $result;
	}
	$email = isset( $_POST['course-email'] ) ? trim( wp_unslash( $_POST['course-email'] ) ) : '';
	if ( '' === $email || ! is_email( $email ) ) {
		return $result; // 空・形の誤りは CF7 の標準の判定に任せる
	}
	if ( ! untronc_is_google_email( $email ) ) {
		$result->invalidate( $tag, 'Google のアカウント(Gmail、または Google Workspace の独自ドメイン)のメールアドレスを入れてください。' );
	}
	return $result;
}

function untronc_is_google_email( $email ) {
	$domain = strtolower( substr( strrchr( $email, '@' ), 1 ) );
	if ( in_array( $domain, array( 'gmail.com', 'googlemail.com' ), true ) ) {
		return true;
	}
	$hosts = array();
	if ( ! function_exists( 'getmxrr' ) || ! getmxrr( $domain, $hosts ) ) {
		return false;
	}
	foreach ( $hosts as $host ) {
		if ( preg_match( '/(^|\.)(google|googlemail)\.com\.?$/i', $host ) ) {
			return true;
		}
	}
	return false;
}

使っている wpcf7_validate_email* は、Contact Form 7 の公式が案内している、必須のメールアドレスの欄に自分の入力チェックを足すためのフィルター(決まった場面で自分の処理を差し込む仕組み)です。条件に合わないときに $result->invalidate() を呼ぶと、渡した文が欄の下に出ます(出典:Contact Form 7「Custom validation」)。

ほかのフォームで使うときは、course-email を自分の欄の項目名に変えてください。

確かめた結果

10月8日に、Claude Code が次の3つを入れて確かめました。止まる送信なので、メールは飛んでいません。

  • mac.com のアドレス:送信が止まり、欄の下にエラーメッセージが出た
  • gmail.com のアドレス:この欄は通った
  • Google のメールを使うドメインの例として google.com のアドレス(MX は smtp.google.com):この欄は通った

ファイルを置いたあとも、トップページと講座のページは普通に開けました。

10月11日にも、見本の入力(名前「見本 花子」、連絡先 sample@example.com、講座で使うメールアドレス sample@mac.com)で送信が止まることを確かめています。

講座の申し込みフォームで、講座で使うメールアドレスに sample@mac.com を入れて送信し、欄の下にエラーメッセージが出た画面

気をつけること

コードの動きから言えることが2つあります。

  • MX レコードは送信のたびに調べます。そのときに調べられなかった場合も、断られます
  • 会社のドメインで Google Workspace を使っていても、メールの受け取りを別のサーバーに向けていると、この入力チェックでは断られます

いまのところ、実際に断られた方はいません。ただ、こうした方のために、注意書きに「通らないときは〇〇までご連絡ください」のような連絡先を添えておくと安心です。

自分のフォームに、条件に合わない入力でテスト送信してみてください

フォームに「〇〇に限ります」と書いている方は、その条件に合わない入力でテスト送信してみてください。送信が通ったら、注意書きは入力を止めていません。

Contact Form 7 で同じことをしたい、自分のフォームに合わせて直してほしい、というときは、お問い合わせフォームからどうぞ。

最後まで読んでくださりありがとうございました!

コメント