Zend_Validate-EmailAddress.xml 15 KB

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