Skip to content

Commit 97925f6

Browse files
committed
E-Mail: Sprache/Grammatik. Nicht mehr aktuelle Infos/Links entfernt
1 parent 0324ac2 commit 97925f6

File tree

1 file changed

+30
-25
lines changed

1 file changed

+30
-25
lines changed

email/standard-mail-validation.md

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,50 +8,55 @@ group: "E-Mail"
88
orderId: 2
99

1010
creator: hausl
11+
1112
author:
1213
- name: hausl
1314
profile: 21246
1415

1516
- name: tr0y
1617
profile: 21125
1718

19+
- name: mermshaus
20+
profile: 15041
21+
1822
inhalt:
19-
- name: "filter_var()"
23+
- name: "filter_var"
2024
anchor: filtervar
2125
simple: "als Standard-Weg"
2226

23-
- name: "Internationale Domainnamen / Punycode"
27+
- name: "Internationale Domainnamen / Punycode"
2428
anchor: idn
2529
simple: "Domains mit Sonderzeichen"
2630

27-
- name: "Ohne Punycode"
31+
- name: "Ohne Punycode"
2832
anchor: ohne-punycode
2933
simple: "Lose Rahmenprüfung durch reguläre Ausdrücke"
3034

31-
- name: "DNS Domain-Prüfung"
35+
- name: "DNS Domain-Prüfung"
3236
anchor: dns
3337
simple: "zusätzliche Existenz-Prüfung"
3438

35-
- name: "Weiterführende Quellen"
39+
- name: "Weiterführende Quellen"
3640
anchor: quellen
3741
simple: "Links und RFCs"
3842

39-
4043
entry-type: in-discussion
4144
---
4245

43-
Dieses Tutorial zeigt grundsätzliche (übliche) Möglichkeiten, eine E-Mail-Adresse *(wie sie für den Transport per SMTP im Internet verwendet wird, bestehend aus zwei Teilen, die durch ein @-Zeichen voneinander getrennt sind)*
44-
zu validieren.
46+
Dieses Tutorial zeigt grundsätzliche (übliche) Möglichkeiten, eine E-Mail-Adresse (wie sie für den Transport per SMTP im Internet verwendet wird, bestehend aus zwei Teilen, die durch ein @-Zeichen voneinander getrennt sind) zu validieren.
4547

46-
<div class="alert alert-info">Vorweg sei an dieser Stelle erwähnt, dass eine Prüfung auf tatsächliche Existenz einer E-Mail-Adresse auf diesem Weg nicht möglich ist. Die nachfolgenden Ansätze dienen lediglich zur Feststellung ob die grundlegenden formellen Rahmenbedingungen erfüllt werden bzw. einer positiven <a href="http://de.wikipedia.org/wiki/Domain_Name_System">DNS</a>-Antwort im Falle einer <a href="http://de.wikipedia.org/wiki/Domain">Domain</a>-<a href="http://de.wikipedia.org/wiki/Domain_Name_System">DNS</a>-Prüfung.</div>
48+
<div class="alert alert-info">
49+
Vorweg sei an dieser Stelle erwähnt, dass eine Prüfung auf tatsächliche Existenz einer E-Mail-Adresse auf diesem Weg nicht möglich ist. Die nachfolgenden Ansätze dienen lediglich zur Feststellung, ob die grundlegenden formellen Rahmenbedingungen erfüllt werden bzw. ob eine positive <a href="http://de.wikipedia.org/wiki/Domain_Name_System">DNS</a>-Antwort im Falle einer <a href="http://de.wikipedia.org/wiki/Domain">Domain</a>-DNS-Prüfung vorliegt.
50+
</div>
4751

48-
Des Weiteren erhebt dieses Tutorial nicht den Anspruch, [sämtlichen RFC zu diesem Thema](#rfc) zu genügen (wenn sich schon die meisten großen Provider und Mail-Anbieter nicht daran halten ...).
52+
Des Weiteren erhebt dieses Tutorial nicht den Anspruch, sämtlichen [RFCs zu diesem Thema](#rfc) zu genügen. Auch viele der großen Provider und E-Mail-Anbieter befolgen nicht alle RFCs.
4953

5054

51-
## [filter_var()](#filtervar)
55+
56+
## [filter_var](#filtervar)
5257
{: #filtervar}
5358

54-
PHP stellt ab Version 5.2 die Funktion [filter_var()](http://php.net/manual/de/function.filter-var.php) zur Verfügung. Mit dem optionalen Parameter FILTER_VALIDATE_EMAIL kann diese grundsätzlich zur E-Mail-Validierung verwendet werden. Jedoch ist es damit nicht möglich internationalisierte E-Mail-Adressen zu prüfen - solche werden immer als falsch ausgewertet. Lösungsansätze folgen [weiter unten](#idn).
59+
PHP stellt ab Version 5.2 die Funktion [filter_var](http://php.net/manual/de/function.filter-var.php) zur Verfügung. Mit dem Parameter `FILTER_VALIDATE_EMAIL` kann diese grundsätzlich zur E-Mail-Validierung verwendet werden. Jedoch ist es damit nicht möglich, internationalisierte E-Mail-Adressen zu prüfen solche werden immer als falsch ausgewertet. Lösungsansätze folgen [weiter unten](#idn).
5560

5661
~~~ php
5762
function isValidEmail($mail) {
@@ -63,9 +68,7 @@ var_dump(isValidEmail("pelé@example.com")); // false
6368
var_dump(isValidEmail("mail@übung.de")); // false
6469
~~~
6570

66-
**Hinweis**
67-
68-
Sollte filter_var() nicht verfügbar sein, dann den Provider kontaktieren (oder wechseln ;)). Im ungünstigsten Fall gibt es [auf dieser Seite](http://www.regular-expressions.info/email.html) unten (vorletzter Absatz) ein zu [RFC 2822](http://tools.ietf.org/html/rfc2822) empfohlenen regulären Ausdruck (Regex).
71+
Sollte `filter_var` nicht eingesetzt werden können, gibt es [auf dieser Seite](http://www.regular-expressions.info/email.html) unten (vorletzter Absatz) einen zu [RFC 2822](http://tools.ietf.org/html/rfc2822) empfohlenen regulären Ausdruck.
6972

7073
> We get a more practical implementation of RFC 2822 if we omit the syntax using double quotes and square brackets. It will still match 99.99% of all email addresses in actual use today.
7174
@@ -82,17 +85,18 @@ var_dump(isValidEmail("pelé@example.com")); // false
8285
var_dump(isValidEmail("mail@übung.de")); // false
8386
~~~
8487

85-
Dies kann alternativ zu filter_var() verwendet werden. Ebenso wie [oben bei filter_var()](#filtervar) schlägt die Prüfung von internationalisierten Domains fehl (was hier bereits am Pattern erkennbar ist).
88+
Dieser kann alternativ zu `filter_var` verwendet werden. Ebenso wie bei `filter_var` schlägt die Prüfung von internationalisierten Domains fehl. (Das ist hier bereits am Pattern erkennbar.)
89+
8690

8791

8892
## [Internationalisierte Domainnamen (IDN)](#idn)
8993
{: #idn}
9094

95+
Um auch internationalisierte Domains/E-Mail-Adressen auf grundsätzliche formelle Korrektheit zu prüfen, ist die Konvertierung in [Punycode](http://de.wikipedia.org/wiki/Punycode) *vor* der eigentlichen Prüfung nötig. Weitere Informationen und Möglichkeiten zur Konvertierung gibt es [hier]({{ page.root }}/jumpto/idna/).
9196

92-
Um auch internationalisierte Domains / E-Mail-Adressen auf grundsätzliche formelle Korrektheit zu prüfen ist die Konvertierung in [Punycode](http://de.wikipedia.org/wiki/Punycode) **vor** der eigentlichen Prüfung nötig. Weitere Informationen und Möglichkeiten zur Konvertierung gibt es [hier]({{ page.root }}/jumpto/idna/).
9397

9498

95-
## [Ohne Punycode - Lose Rahmenprüfung mittels regulären Ausdrücken (Regex)](#ohne-punycode)
99+
## [Ohne Punycode: Lose Rahmenprüfung mittels regulären Ausdrücken (Regex)](#ohne-punycode)
96100
{: #ohne-punycode}
97101

98102
Diese Variante kommt ohne Punycode-Konvertierung aus. Hierbei spielen die verwendeten Zeichen kaum eine Rolle, denn es wird nur der grobe Rahmen geprüft und ob keine Whitespaces (Leerzeichen, Tabstopps, etc.) vorhanden sind.
@@ -118,12 +122,14 @@ var_dump(isValidEmail("test@übärdrübär.com")); // tru
118122
var_dump(isValidEmail("[email protected].übärdrübär.com")); // true
119123
~~~
120124

125+
126+
121127
## [Zusatz-Option: DNS-Domain-Prüfung](#dns)
122128
{: #dns}
123129

124-
Generell kann in jeder oben angeführten Varianten, wenn gewüscht, die Antwort des [DNS](http://de.wikipedia.org/wiki/Domain_Name_System) zur Domain (auf vorhandenen ["MX" oder "A"-Record](http://de.wikipedia.org/wiki/Domain_Name_System#Aufbau_der_DNS-Datenbank)) berücksichtigt werden.
130+
Generell kann in jeder der oben angeführten Varianten, wenn gewüscht, die Antwort des [DNS](http://de.wikipedia.org/wiki/Domain_Name_System) zur Domain (auf vorhandenen ["MX" oder "A"-Record](http://de.wikipedia.org/wiki/Domain_Name_System#Aufbau_der_DNS-Datenbank)) berücksichtigt werden.
125131

126-
Hinweis: Die an das DNS übergebene Domain der E-Mail-Adresse muss für die Verwendung von internationalisierten Domains (wie bei filter_var()) ebenfalls in [Punycode konvertiert]({{ page.root }}/jumpto/idna/) sein.
132+
Hinweis: Die an das DNS übergebene Domain der E-Mail-Adresse muss für die Verwendung von internationalisierten Domains (wie bei `filter_var`) ebenfalls in [Punycode konvertiert]({{ page.root }}/jumpto/idna/) sein.
127133

128134
~~~ php
129135
function checkEMailDomainDNS($mail) {
@@ -135,19 +141,18 @@ var_dump(checkEMailDomainDNS('[email protected]')); // true
135141
~~~
136142

137143

144+
138145
## [Weiterführende Quellen](#quellen)
139146
{: #quellen}
140147

141-
142148
### [Links](#links)
143149
{: #links}
144150

145-
Wer sich genauer für die Regex-Prüfung interessiert, dem sei [dieser Link](http://squiloople.com/2009/12/20/email-address-validation/) empfohlen. Danke an [Trainmaster](http://www.php.de/member.php?u=20243) für den Link.
146-
147-
Wer sich dafür interessiert wie eigentlich filter_var() validiert, dem sei ein Blick in den Quelltext von PHP empfohlen oder etwas einfacher hier in [diesem Forumsbeitrag](http://www.php.de/wiki-diskussionsforum/101439-erledigt-sinnvolle-standard-verfahren-zur-e-mail-validierung-3.html#post748505). Danke an [Asterixus](http://www.php.de/member.php?u=21236) für die Recherche.
151+
- [Forumsbeitrag][Forum] zur Frage, wie `filter_var` validiert.
148152

153+
[Forum]: https://www.php.de/forum/php-de-intern/wiki-diskussionsforum/103940-erledigt-sinnvolle-standard-verfahren-zur-e-mail-validierung?p=1136882#post1136882
149154

150-
### [RFC zum Thema E-Mail](#rfc)
155+
### [RFCs zum Thema E-Mail](#rfc)
151156
{: #rfc}
152157

153158
* [RFC 2142](http://tools.ietf.org/html/rfc2142) - Mailbox Names for Common Services, Roles and Functions

0 commit comments

Comments
 (0)