You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: email/standard-mail-validation.md
+30-25Lines changed: 30 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,50 +8,55 @@ group: "E-Mail"
8
8
orderId: 2
9
9
10
10
creator: hausl
11
+
11
12
author:
12
13
- name: hausl
13
14
profile: 21246
14
15
15
16
- name: tr0y
16
17
profile: 21125
17
18
19
+
- name: mermshaus
20
+
profile: 15041
21
+
18
22
inhalt:
19
-
- name: "filter_var()"
23
+
- name: "filter_var"
20
24
anchor: filtervar
21
25
simple: "als Standard-Weg"
22
26
23
-
- name: "Internationale Domainnamen / Punycode"
27
+
- name: "Internationale Domainnamen / Punycode"
24
28
anchor: idn
25
29
simple: "Domains mit Sonderzeichen"
26
30
27
-
- name: "Ohne Punycode"
31
+
- name: "Ohne Punycode"
28
32
anchor: ohne-punycode
29
33
simple: "Lose Rahmenprüfung durch reguläre Ausdrücke"
30
34
31
-
- name: "DNS Domain-Prüfung"
35
+
- name: "DNS Domain-Prüfung"
32
36
anchor: dns
33
37
simple: "zusätzliche Existenz-Prüfung"
34
38
35
-
- name: "Weiterführende Quellen"
39
+
- name: "Weiterführende Quellen"
36
40
anchor: quellen
37
41
simple: "Links und RFCs"
38
42
39
-
40
43
entry-type: in-discussion
41
44
---
42
45
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.
45
47
46
-
<divclass="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 <ahref="http://de.wikipedia.org/wiki/Domain_Name_System">DNS</a>-Antwort im Falle einer <ahref="http://de.wikipedia.org/wiki/Domain">Domain</a>-<ahref="http://de.wikipedia.org/wiki/Domain_Name_System">DNS</a>-Prüfung.</div>
48
+
<divclass="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>
47
51
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.
49
53
50
54
51
-
## [filter_var()](#filtervar)
55
+
56
+
## [filter_var](#filtervar)
52
57
{: #filtervar}
53
58
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).
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.
69
72
70
73
> 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.
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
+
86
90
87
91
88
92
## [Internationalisierte Domainnamen (IDN)](#idn)
89
93
{: #idn}
90
94
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/).
91
96
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/).
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
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.
125
131
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.
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.
0 commit comments