1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 21241 -->
4 <sect2 id="zend.validate.set.email_address">
8 <classname>Zend_Validate_EmailAddress</classname> は、メールアドレスの検証を行います。
11 に分割し、メールアドレスやホスト名の仕様にあわせて検証します。
14 <sect3 id="zend.validate.set.email_address.basic">
15 <title>基本的な使用法</title>
21 <programlisting language="php"><![CDATA[
22 $validator = new Zend_Validate_EmailAddress();
23 if ($validator->isValid($email)) {
27 foreach ($validator->getMessages() as $message) {
34 これは、メールアドレス <varname>$email</varname> を検証し、失敗した場合は
36 <code>$validator->getMessages()</code> で取得します。
40 <sect3 id="zend.validate.set.email_address.options">
41 <title>メールアドレス検証のオプション</title>
44 <classname>Zend_Validate_EmailAddress</classname>は、
45 開始時に関係するオプションを持つ配列を与えることによって、
46 または後で <methodname>setOptions()</methodname> を使って
47 セットできるいくつかのオプションをサポートします。
54 <emphasis><property>allow</property></emphasis>: ドメイン名のいずれのタイプを受付可能か定義します。
55 このオプションは、ホスト名バリデータをセットするために
56 hostname オプションとともに使われます。
58 <link linkend="zend.validate.set.hostname">ホスト名</link>をご覧ください。
59 そして <constant>ALLOW</constant>* 定数が可能です。
60 既定値は <constant>ALLOW_DNS</constant> です。
66 <emphasis><property>deep</property></emphasis>: サーバの MX レコードを強度のチェックで検証するべきかどうか定義します。
67 このオプションが <constant>TRUE</constant> に設定されると、
68 サーバがメールを受け付けるかどうか検証するために、
69 MX レコードに加えて A , A6 及び <constant>AAAA</constant> レコードも使われます。
70 このオプションの既定値は <constant>FALSE</constant> です。
76 <emphasis><property>domain</property></emphasis>: ドメインパートをチェックすべきかどうか定義します。
77 このオプションが <constant>FALSE</constant> に設定されると、
78 メールアドレスのローカルパートのみがチェックされます。
79 この場合、ホスト名バリデータは呼ばれません。
80 このオプションの既定値は <constant>TRUE</constant> です。
86 <emphasis><property>hostname</property></emphasis>: 検証される電子メール・アドレスのドメインパートで
93 <emphasis><property>mx</property></emphasis>: サーバから MX レコードが検出されるべきかどうか定義します。
94 もしこのオプションが <constant>TRUE</constant> と定義されると、
95 サーバがメールを受け付けるかどうか検証するために MX レコードが使われます。
96 このオプションの既定値は <constant>FALSE</constant> です。
101 <programlisting language="php"><![CDATA[
102 $validator = new Zend_Validate_EmailAddress();
103 $validator->setOptions(array('domain' => false));
107 <sect3 id="zend.validate.set.email_address.complexlocal">
108 <title>複雑なローカルパート</title>
111 <classname>Zend_Validate_EmailAddress</classname> は、メールアドレスの検証を
112 RFC2822 にもとづいて行います。たとえば、妥当な形式のメールアドレスとしては
113 <code>bob@domain.com</code>、<code>bob+jones@domain.us</code>、
114 <code>"bob@jones"@domain.com</code> および <code>"bob jones"@domain.com</code>
119 かつて使われていたものの、現在は有効とはみなされないフォーマットもあります
120 (たとえば、メールアドレスに改行文字や "\" を使用するなど)。
124 <sect3 id="zend.validate.set.email_address.purelocal">
125 <title>ローカルパートのみの検証</title>
128 もしメールアドレスのローカルパートのみをチェックするために
129 <classname>Zend_Validate_EmailAddress</classname> を必要として、
131 <property>domain</property> オプションに <constant>FALSE</constant> を設定できます。
132 これにより、 <classname>Zend_Validate_EmailAddress</classname> が
133 メールアドレスのホスト名部分を検証しないようにします。
136 <programlisting language="php"><![CDATA[
137 $validator = new Zend_Validate_EmailAddress();
138 $validator->setOptions(array('domain' => FALSE));
142 <sect3 id="zend.validate.set.email_address.hostnametype">
143 <title>さまざまな形式のホスト名の検証</title>
147 <link linkend="zend.validate.set.hostname"><classname>Zend_Validate_Hostname</classname></link>
148 で行います。デフォルトでは、<code>domain.com</code>
149 形式の DNS ホスト名のみが有効となります。しかし、
150 IP アドレスやローカルホスト名も有効にしたいこともあるでしょう。
154 その場合は、<classname>Zend_Validate_EmailAddress</classname>
155 のインスタンスを作成する際にパラメータを渡さなければなりません。
156 このパラメータで、認めたいホスト名の形式を指定します。
157 詳細は <classname>Zend_Validate_Hostname</classname> を参照ください。
158 たとえば DNS ホスト名およびローカルホスト名のどちらも許可するには、次のようにします。
161 <programlisting language="php"><![CDATA[
162 $validator = new Zend_Validate_EmailAddress(
163 Zend_Validate_Hostname::ALLOW_DNS |
164 Zend_Validate_Hostname::ALLOW_LOCAL);
165 if ($validator->isValid($email)) {
166 // メールアドレスは正しい形式のようです
169 foreach ($validator->getMessages() as $message) {
176 <sect3 id="zend.validate.set.email_address.checkacceptance">
177 <title>そのホスト名が実際にメールを受け付けるかどうかのチェック</title>
180 ただ単にメールアドレスが正しい書式であるというだけでは、
181 そのアドレスが実際に存在するかどうかはわかりません。
182 この問題を解決するには、MX の検証を行います。
183 メールアドレスのホスト名に対応する DNS レコードに、MX (メール)
184 のエントリが存在するかどうかを調べるのです。
185 これは、そのホストがメールを受け付けているかどうかを教えてはくれますが、
186 そのメールアドレス自体が正しいものであるかどうかを知ることはできません。
190 MX のチェックはデフォルトでは無効です。
191 MX のチェックを有効にするには、<classname>Zend_Validate_EmailAddress</classname>
192 コンストラクタの 2 番目のパラメータを渡します。
195 <programlisting language="php"><![CDATA[
196 $validator = new Zend_Validate_EmailAddress(
198 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
205 <title>WindowsでのMX のチェック</title>
209 MX のチェックは <acronym>PHP</acronym> 5.3 かそれ以上を使う場合のみ可能です。
210 <acronym>PHP</acronym> 5.3 未満では MX のチェックはオプションで有効にされたとしても、
216 あるいは、<constant>TRUE</constant> または <constant>FALSE</constant> を
217 <code>$validator->setValidateMx()</code> に渡すことで、
218 MX の検証を有効あるいは無効にすることもできます。
222 この設定を有効にすると、ネットワーク関数を用いて
223 メールアドレスのホスト名部に対する MX レコードの存在チェックをします。
224 これにより、スクリプトの処理速度が低下することに気をつけてください。
228 しばしば MX レコードの検証は、メールが受け付けられたとしても <constant>FALSE</constant> を返します。
229 この振る舞いの背後にある理由は、サーバが MX レコードを提供しなくてもサーバはメールを受付できることです。
230 この場合、サーバは A, A6 または <constant>AAAA</constant> レコードを提供します。
231 それらのほかのレコードでも <classname>Zend_Validate_EmailAddress</classname> がチェックできるようにするためには、
232 強度の MX 検証を設定する必要があります。
233 これは開始時に <property>deep</property> オプションを設定するか、
234 または <methodname>setOptions()</methodname> を使って行ないます。
237 <programlisting language="php"><![CDATA[
238 $validator = new Zend_Validate_EmailAddress(
240 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
248 <title>パフォーマンスの警告</title>
251 MX チェックを有効にすると、使用されるネットワーク機能のせいで
252 スクリプトが遅くなることに気づくでしょう。
253 強度のチェックを有効にすると与えられたサーバで追加の3種類を探すため、
259 <title>許可されないIPアドレス</title>
262 MX 検証は外部のサーバでのみ受け付けられることを注意すべきです。
264 <command>192.168.*</command> や <command>169.254.*</command> のような
265 ローカル IP アドレスは受け付けません。
270 <sect3 id="zend.validate.set.email_address.validateidn">
271 <title>国際化ドメイン名の検証</title>
274 <classname>Zend_Validate_EmailAddress</classname> は、ドメインの中に国際文字が使われている場合も処理できます。
275 このようなドメインは、国際化ドメイン名 (International Domain Name: IDN)
276 と呼ばれています。これはデフォルトで有効になっていますが、無効にすることも可能です。
277 無効にするには、<classname>Zend_Validate_EmailAddress</classname> が内部で保持している
278 <classname>Zend_Validate_Hostname</classname> オブジェクトの設定を変更します。
281 <programlisting language="php"><![CDATA[
282 $validator->getHostnameValidator()->setValidateIdn(false);
286 <methodname>setValidateIdn()</methodname> の詳細な使用法は、
287 <classname>Zend_Validate_Hostname</classname> のドキュメントを参照ください。
291 IDN の検証は、DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。
295 <sect3 id="zend.validate.set.email_address.validatetld">
296 <title>トップレベルドメインの検証</title>
299 デフォルトでは、ホスト名の検証は既知の TLD の一覧に基づいて行われます。
300 これはデフォルトで有効になっていますが、無効にすることもできます。無効にするには、
301 無効にするには、<classname>Zend_Validate_EmailAddress</classname> が内部で保持している
302 <classname>Zend_Validate_Hostname</classname> オブジェクトの設定を変更します。
305 <programlisting language="php"><![CDATA[
306 $validator->getHostnameValidator()->setValidateTld(false);
310 <methodname>setValidateTld()</methodname> の詳細な使用法は、
311 <classname>Zend_Validate_Hostname</classname> のドキュメントを参照ください。
315 TLD の検証は、DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。
319 <sect3 id="zend.validate.set.email_address.setmessage">
320 <title>メッセージの設定</title>
323 <classname>Zend_Validate_EmailAddress</classname> は、
324 <classname>Zend_Validate_Hostname</classname> を使用してメールアドレスのホスト名部分をチェックします。
325 Zend Framework 1.10 以降、
326 <classname>Zend_Validate_Hostname</classname> 用のメッセージを
327 <classname>Zend_Validate_EmailAddress</classname>
331 <programlisting language="php"><![CDATA[
332 $validator = new Zend_Validate_EmailAddress();
333 $validator->setMessages(
335 Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
341 Zend Framework 1.10 より前のバージョンでは、まず
342 <classname>Zend_Validate_Hostname</classname> にメッセージをアタッチしてからそれを
343 <classname>Zend_Validate_EmailAddress</classname> に設定しないと独自のメッセージを返せませんでした。