2
0

Zend_Validate-EmailAddress.xml 15 KB

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