Zend_Validate-EmailAddress.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20115 -->
  3. <!-- Reviewed: no -->
  4. <sect2 id="zend.validate.set.email_address">
  5. <title>Email Adresse</title>
  6. <para>
  7. <classname>Zend_Validate_EmailAddress</classname> erlaubt die Prüfung von Email Adressen.
  8. Der Prüfer teilt zuerst die Email Adresse in lokalen Teil @ hostname und versucht diese mit
  9. bekannten Spezifikationen für Email Adressen und Hostnamen zu prüfen.
  10. </para>
  11. <sect3 id="zend.validate.set.email_address.basic">
  12. <title>Normale Verwendung</title>
  13. <para>
  14. Ein Beispiel einer normalen Benutzung ist anbei:
  15. </para>
  16. <programlisting language="php"><![CDATA[
  17. $validator = new Zend_Validate_EmailAddress();
  18. if ($validator->isValid($email)) {
  19. // Email Adresse scheint gültig zu sein
  20. } else {
  21. // Email Adresse ist ungültig, drucke die Gründe hierfür
  22. foreach ($validator->getMessages() as $message) {
  23. echo "$message\n";
  24. }
  25. }
  26. ]]></programlisting>
  27. <para>
  28. Das prüft die Email Adresse <varname>$email</varname> und gibt bei einem Fehler über
  29. <code>$validator->getMessages()</code> eine nützliche Fehlermeldung aus.
  30. </para>
  31. </sect3>
  32. <sect3 id="zend.validate.set.email_address.options">
  33. <title>Optionen für die Prüfung von Email Adressen</title>
  34. <para>
  35. <classname>Zend_Validate_EmailAddress</classname> unterstützt verschiedene Optionen
  36. welche entweder bei der Initiierung, durch Übergeben eines Arrays mit den betreffenden
  37. Optionen, gesetzt werden können, oder im Nachhinein, durch Verwendung von
  38. <methodname>setOptions()</methodname>. Die folgenden Optionen werden unterstützt:
  39. </para>
  40. <itemizedlist>
  41. <listitem>
  42. <para>
  43. <emphasis>allow</emphasis>: Definiert welche Typen von Domain Namen akzeptiert
  44. werden. Diese Option wird in Verbindung mit der hostname Option verwendet um
  45. die Hostname Prüfung zu setzen. Für weitere Informationen über mögliche Werte
  46. dieser Option sehen Sie bitte unter <link
  47. linkend="zend.validate.set.hostname">Hostname</link> und mögliche
  48. <constant>ALLOW</constant>* Konstanten. Der Standardwert dieser Option ist
  49. <constant>ALLOW_DNS</constant>.
  50. </para>
  51. </listitem>
  52. <listitem>
  53. <para>
  54. <emphasis>hostname</emphasis>: Setzt die Hostname Prüfung mit welcher der Domain
  55. Teil der Email Adresse geprüft wird.
  56. </para>
  57. </listitem>
  58. <listitem>
  59. <para>
  60. <emphasis>mx</emphasis>: Definiert ob der MX Record vom Server erkannt werden
  61. soll. Wenn diese Option auf <constant>TRUE</constant> definiert wird, dann
  62. wird der MX Record verwendet um zu prüfen ob der Server Emails akzeptiert. Der
  63. Standardwert dieser Option ist <constant>FALSE</constant>.
  64. </para>
  65. </listitem>
  66. <listitem>
  67. <para>
  68. <emphasis>deep</emphasis>: Definiert ob die MX Records des Server durch eine
  69. tiefe Prüfung verifiziert werden sollen. Wenn diese Option auf
  70. <constant>TRUE</constant> gesetzt wird, dann werden zusätzlich zum MX Record
  71. auch die A, A6 und <constant>AAAA</constant> Records verwendet um zu prüfen ob
  72. der Server Emails akzeptiert. Der Standardwert dieser Option ist
  73. <constant>FALSE</constant>.
  74. </para>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. <emphasis>domain</emphasis>: Definiert ob der Domain Teil geprüft werden soll.
  79. Wenn diese Option auf <constant>FALSE</constant> gesetzt wird, dann wird nur der
  80. lokale Teil der Email Adresse geprüft. In diesem Fall wird die Hostname Prüfung
  81. nicht aufgerufen. Der Standardwert dieser Option ist <constant>TRUE</constant>.
  82. </para>
  83. </listitem>
  84. </itemizedlist>
  85. <programlisting language="php"><![CDATA[
  86. $validator = new Zend_Validate_EmailAddress();
  87. $validator->setOptions(array('domain' => false));
  88. ]]></programlisting>
  89. </sect3>
  90. <sect3 id="zend.validate.set.email_address.complexlocal">
  91. <title>Komplexe lokale Abschnitte</title>
  92. <para>
  93. <classname>Zend_Validate_EmailAdress</classname> prüft jede gültige Email Adresse mit
  94. RFC2822. Gültige Email Adressen sind zum Beispiel
  95. <code>bob@domain.com</code>, <code>bob+jones@domain.us</code>,
  96. <code>"bob@jones"@domain.com</code> und <code>"bob jones"@domain.com</code>
  97. </para>
  98. <para>
  99. Einige Email Formate werden aktuell nicht geprüft (z.B. Zeilenumbruch Zeichen oder ein
  100. "\" Zeichen in einer Email Adresse).
  101. </para>
  102. </sect3>
  103. <sect3 id="zend.validate.set.email_address.purelocal">
  104. <title>Nur den lokalen Teil prüfen</title>
  105. <para>
  106. Wenn man will das <classname>Zend_Validate_EmailAddress</classname> nur den lokalen Teil
  107. der Email Adresse prüfen soll, und die Prüfung des Hostnamens ausschalten will, kann man
  108. die <property>domain</property> Option auf <constant>FALSE</constant> setzen. Das
  109. zwingt <classname>Zend_Validate_EmailAddress</classname> den Hostname Teil der Email
  110. Adresse nicht zu prüfen.
  111. </para>
  112. <programlisting language="php"><![CDATA[
  113. $validator = new Zend_Validate_EmailAddress();
  114. $validator->setOptions(array('domain' => FALSE));
  115. ]]></programlisting>
  116. </sect3>
  117. <sect3 id="zend.validate.set.email_address.hostnametype">
  118. <title>Prüfen von unterschiedlichen Typen von Hostnamen</title>
  119. <para>
  120. Der Teil des Hostnamens einer Email Adresse wird mit <link
  121. linkend="zend.validate.set.hostname"><classname>Zend_Validate_Host</classname></link>
  122. geprüft. Standardmäßig werden nur DNS Hostnamen in der Form <code>domain.com</code>
  123. akzeptiert, aber wenn es gewünscht ist, können auch IP Adressen und lokale Hostnamen
  124. auch akzeptiert werden.
  125. </para>
  126. <para>
  127. Um das zu tun, muß eine <classname>Zend_Validate_EmailAddress</classname> Instanz
  128. erstellt werden der ein Parameter übergeben wird, um den Typ des Hostnamens anzugeben
  129. der akzeptiert werden soll. Mehr Details sind in
  130. <classname>Zend_Validate_Hostname</classname> inkludiert, zusammen mit einem Beispiel,
  131. wie DNS und lokale Hostnamen, akzeptiert werden wie im Beispiel das anbei steht:
  132. </para>
  133. <programlisting language="php"><![CDATA[
  134. $validator = new Zend_Validate_EmailAddress(
  135. Zend_Validate_Hostname::ALLOW_DNS |
  136. Zend_Validate_Hostname::ALLOW_LOCAL);
  137. if ($validator->isValid($email)) {
  138. // Email Adresse scheint gültig zu sein
  139. } else {
  140. // Email ist ungültig; Gründe ausdrucken
  141. foreach ($validator->getMessages() as $message) {
  142. echo "$message\n";
  143. }
  144. }
  145. ]]></programlisting>
  146. </sect3>
  147. <sect3 id="zend.validate.set.email_address.checkacceptance">
  148. <title>Prüfen ob der Hostname aktuell Emails akzeptiert</title>
  149. <para>
  150. Nur weil eine Email Adresse im richtigen Format ist, heißt das notwendigerweise nicht
  151. das die Email Adresse aktuell auch existiert. Um dieses Problem zu lösen, kann MX
  152. Prüfung verwendet werden um zu prüfen ob ein MX (Email) Eintrag im DNS Eintrag für den
  153. Hostnamen der Email existiert. Das zeigt ob der Hostname Emails akzeptiert, sagt aber
  154. nicht aus, ob die genaue Email Adresse selbst gültig ist.
  155. </para>
  156. <para>
  157. Die MX Prüfung ist standardmäßig nicht eingeschaltet. Um die MX Prüfung einzuschalten
  158. kann ein zweiter Parameter an den <classname>Zend_Validate_EmailAddress</classname>
  159. Konstruktor übergeben werden.
  160. </para>
  161. <programlisting language="php"><![CDATA[
  162. $validator = new Zend_Validate_EmailAddress(
  163. array(
  164. 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
  165. 'mx' => true
  166. )
  167. );
  168. ]]></programlisting>
  169. <note>
  170. <title>Die MX Prüfung unter Windows</title>
  171. <para>
  172. In Windows Umgebungen ist die MX Prüfung nicht vorhanden wenn <acronym>PHP</acronym>
  173. 5.3 oder höher verwendet wird. Unter <acronym>PHP</acronym> 5.3 wird die MX
  174. Prüfung nicht verwendet, selbst wenn diese in den Optionen aktiviert wurde.
  175. </para>
  176. </note>
  177. <para>
  178. Alternativ kann entweder <constant>TRUE</constant> oder <constant>FALSE</constant> an
  179. <code>$validator->setValidateMx()</code> übergeben werden um die MX Prüfung ein- oder
  180. auszuschalten.
  181. </para>
  182. <para>
  183. Durch das einschalten dieser Option werden Netzwerk Funktionen verwendet um zu Prüfen
  184. ob ein MX Eintrag am Hostnamen der Email Adresse existiert, welche geprüft werden soll.
  185. Vorsicht davor, das hierbei das eigene Skript langsamer wird.
  186. </para>
  187. <para>
  188. Manchmal gibt die Prüfung auf MX Records <constant>FALSE</constant> zurück, selbst wenn
  189. Emails akzeptiert werden. Der Hintergrund dieses Verhaltens ist, das der Server Emails
  190. akzeptieren kann, selbst wenn er keinen MX Record anbietet. In diesem Fall kann er A, A6
  191. oder <constant>AAAA</constant> Records anbieten. Um es
  192. <classname>Zend_Validate_EmailAddress</classname> zu erlauben auch auf diese anderen
  193. Records zu prüfen, muss man die tiefe MX Prüfung einschalten. Das kann man durch Setzen
  194. der <property>deep</property> Option bei der Initialisierung, oder durch Verwendung von
  195. <methodname>setOptions()</methodname> tun.
  196. </para>
  197. <programlisting language="php"><![CDATA[
  198. $validator = new Zend_Validate_EmailAddress(
  199. array(
  200. 'allow' => Zend_Validate_Hostname::ALLOW_DNS,
  201. 'mx' => true,
  202. 'deep' => true
  203. )
  204. );
  205. ]]></programlisting>
  206. <warning>
  207. <title>Performance Warnung</title>
  208. <para>
  209. Man sollte darauf achten das die Aktivierung der MX Prüfung das Skript langsamer
  210. machen wird, weil es Netzwerk Funktionen verwendet. Die Aktivierung der tiefen
  211. Prüfung macht das Skript sogar noch langsamer da es im angegebenen Server nach
  212. 3 zusätzlichen Typen sucht.
  213. </para>
  214. </warning>
  215. <note>
  216. <title>Disallowed IP addresses</title>
  217. <para>
  218. Man sollte beachten das die MX Prüfung nur für externe Server akzeptiert wird. Wenn
  219. die tiefe MX Prüfung aktiviert wird, dann werden IP Adressen wie
  220. <command>192.168.*</command> oder <command>169.254.*</command> nicht akzeptiert.
  221. </para>
  222. </note>
  223. </sect3>
  224. <sect3 id="zend.validate.set.email_address.validateidn">
  225. <title>Internationale Domain Namen prüfen</title>
  226. <para>
  227. <classname>Zend_Validate_EmailAddress</classname> prüft auch internationale Zeichen
  228. prüfen, die in einigen Domains existieren. Dies ist als Unterstützung für
  229. Internationale Domain Namen (IDN) bekannt. Standardmäßig ist das eingeschaltet. Das
  230. kann aber ausgeschaltet werden indem eine Einstellung geändert wird über das interne
  231. <classname>Zend_Validate_Hostname</classname> Objekt das innerhalb von
  232. <classname>Zend_Validate_EmailAddress</classname> existiert.
  233. </para>
  234. <programlisting language="php"><![CDATA[
  235. $validator->getHostnameValidator->setValidateIdn(false);
  236. ]]></programlisting>
  237. <para>
  238. Weitere Informationen über die Verwendung von <methodname>setValidateIdn()</methodname>
  239. gibt es in der <classname>Zend_Validate_Hostname</classname> Dokumentation.
  240. </para>
  241. <para>
  242. Es sollte darauf geachtet werden das IDNs nur geprüft werden wenn erlaubt ist DNS
  243. Hostnamen zu prüfen.
  244. </para>
  245. </sect3>
  246. <sect3 id="zend.validate.set.email_address.validatetld">
  247. <title>Top Level Domains prüfen</title>
  248. <para>
  249. Standardmäßig wird ein Hostname mit einer List von bekannten TLDs geprüft. Das ist
  250. standardmäßig aktiviert, kann aber ausgeschaltet werden indem die Einstellung über das
  251. interne <classname>Zend_Validate_Hostname</classname> geändert wird, das innerhalb von
  252. <classname>Zend_Validate_EmailAddress</classname> existiert.
  253. </para>
  254. <programlisting language="php"><![CDATA[
  255. $validator->getHostnameValidator->setValidateTld(false);
  256. ]]></programlisting>
  257. <para>
  258. Mehr Informationen über die Verwendung von <methodname>setValidateTld()</methodname>
  259. gibt es in der <classname>Zend_Validate_Hostname</classname> Dokumentation.
  260. </para>
  261. <para>
  262. Es sollte darauf geachtet werden das TLDs nur geprüft werden wenn es auch erlaubt ist
  263. DNS Hostnamen zu prüfen.
  264. </para>
  265. </sect3>
  266. <sect3 id="zend.validate.set.email_address.setmessage">
  267. <title>Setzen von Meldungen</title>
  268. <para>
  269. <classname>Zend_Validate_EmailAddress</classname> verwendet auch
  270. <classname>Zend_Validate_Hostname</classname> um den Teil des Hostnamens einer
  271. angegebenen Email Adresse zu prüfen. Ab Zend Framework 1.10 kann man Meldungen für
  272. <classname>Zend_Validate_Hostname</classname> auch von innerhalb
  273. <classname>Zend_Validate_EmailAddress</classname> setzen.
  274. </para>
  275. <programlisting language="php"><![CDATA[
  276. $validator = new Zend_Validate_EmailAddress();
  277. $validator->setMessages(array(
  278. Zend_Validate_Hostname::UNKNOWN_TLD => 'Ich kenne die TLD nicht')
  279. );
  280. ]]></programlisting>
  281. <para>
  282. Vor Zend Framework 1.10 musste man die Meldungen einem eigenen
  283. <classname>Zend_Validate_Hostname</classname> hinzufügen, und dann diese Prüfung in
  284. <classname>Zend_Validate_EmailAddress</classname> setzen um die eigenen Meldungen
  285. zurückzubekommen.
  286. </para>
  287. </sect3>
  288. </sect2>
  289. <!--
  290. vim:se ts=4 sw=4 et:
  291. -->