正しいメールアドレスかどうかを調べる手順
- '@'が1つかどうか
- RFC2282に適合しているかどうか
- メールサーバが存在するかどうか
サンプル・プログラム
checkmail.php | サンプル・プログラム本体。 |
解説:'@'が1つかどうか
131: /**
132: * 正しい電子メールアドレスかどうかを調べる
133: * @param string $email 電子メールアドレス
134: * @param string $errmsg 不正時のエラー内容
135: * @return bool TRUE=正しい/FALSE=不正
136: */
137: function check_email_address($email, &$errmsg) {
138: $errmsg = '';
139:
140: //ホスト名を分離
141: $arr = preg_split('/@/', $email);
142: if (count($arr) <= 1) {
143: $errmsg = '@ がありません';
144: return FALSE;
145: } else if (count($arr) > 2) {
146: $errmsg = '@ が2つ以上あります';
147: return FALSE;
148: }
149:
150: //RFC2282チェック
151: if (preg_match(RFC2282, $arr[0]) == FALSE) {
152: $errmsg = '名前が不正です';
153: return FALSE;
154: }
155: if (preg_match(RFC2282, $arr[1]) == FALSE) {
156: $errmsg = 'ホスト名が不正です';
157: return FALSE;
158: }
159:
160: //MXレコードの存在チェック
161: $mxhosts = array();
162: if (getmxrr($arr[1], $mxhosts) == FALSE) {
163: $errmsg = 'ホストが存在しない,またはメール送受信ができない可能性があります(MXレコードがありません)';
164: return FALSE;
165: }
166:
167: return TRUE;
168: }
まず、'@' が1つだけであることを調べる。
後処理で、名前(@より左側)とホスト名(@より右側)のチェックも行うので、関数 preg_split により、あらかじめ名前とホスト名を分離しておく。
(2022年4月23日)マッチングパターンを定数RFC2282に定義