eMail-Prüfung
Jürgen
- php
Hallo,
vorab muss ich gestehen, ich habe 0-Ahnung von PHP. Dennoch
poste ich hier mein Anliegen, ggf. kann selbst mir ja geholfen
werden :-(
Bei der Eingabe einer eMail-Adresse möchte ich, dass diese wenigsten
auf das "@" geprüft wird. Derzeit erhalte ich nur eine Fehler-
meldung, wenn nichts im Feld eingegeben wird, ansonsten wird alles
angenommen. Wo genau muss ich den ( für mich noch nichtbekannten )
Code einbinden bzw. modifizieren ?
Für jede Hilfe bin ich dankbar !
Gruß Jürgen
Skript:
.....................................................................
// FORMULAR ZU ANMELDEN
if ($action=="" and $admin=="") {
print $welcome;
print '<form method="POST" action="'.$url.'?action=add">
E-Mailadresse:<br>
<input type="text" name="email" size="16" maxlength="32"><br>
Name:<br>
<input type="text" name="name" size="16" maxlength="22"><br>
<br>
<input type="submit" value="Anmeldung" name="B1">
</form>';
}
#####################################################
// ADRESSE HINZUFÜGEN
if ($action=="add") {
if ($email=="" || $email==" "){
print $emailleer;
} else {
if (mysql_num_rows(mysql_query("SELECT * FROM $tabellenname WHERE Email = '$email'"))>=1) {
print $mailvorhanden;
} else {
mysql_query("INSERT INTO $tabellenname
VALUES ('$email', '$name', '0')")
or die ("Fehler beim Eintragen in die Datenbank!");
mail($email, "Newsletter-Bestätigung", $message_best, "From: $emailadresse");
print $bestaetigung;
}
}
}
vorab muss ich gestehen, ich habe 0-Ahnung von PHP.
Christian Kruse hat. Du kannst seine eMail-Prüfung verwenden.
Viele Grüße!
_ds
Hallo Schuer,
Christian Kruse hat. Du kannst seine eMail-Prüfung verwenden.
diese ist - wie die meisten derartigen Prüfungen - fehlerhaft.
Beispiel: Top-Level-Domain .museum ist nicht gestattet.
Ob weitere Fehler enthalten sind, kann und will ich nicht beurteilen.
Insgesamt wurde diese Problematik hier bereits oft diskutiert.
Viele beschränken ihre Überprüfung auf das Vorhandensein von @
und einem . irgendwo dahinter ...
Freundliche Grüße
Vinzenz
Ob weitere Fehler enthalten sind, kann und will ich nicht beurteilen.
Ich erst recht nicht ;)
Besonders im Namen des Archivs aber Danke für deinen Hinweis!
Viele Grüße!
_ds
diese ist - wie die meisten derartigen Prüfungen - fehlerhaft.
Beispiel: Top-Level-Domain .museum ist nicht gestattet.
Das ließe sich durch simples Erweitern von my $dom_tldpart = '[a-zA-Z]{2,5}';
zu my $dom_tldpart = '[a-zA-Z]{2,6}';
beheben (gibt es TLDs, die mehr als 6 Zeichen haben?).
Ob weitere Fehler enthalten sind, kann und will ich nicht beurteilen.
Wäre aber interessant zu wissen.
Siechfred
Hallo Siechfred,
diese ist - wie die meisten derartigen Prüfungen - fehlerhaft.
Beispiel: Top-Level-Domain .museum ist nicht gestattet.Das ließe sich durch simples Erweitern von
my $dom_tldpart = '[a-zA-Z]{2,5}';
zumy $dom_tldpart = '[a-zA-Z]{2,6}';
beheben
sicher, aber dazu [Manuel B.]:
Ein Script, das bewusst zukünftige Entwicklungen begrenzt, ist IMHO eine völlige Fehlplanung.
Diese Ansicht kann man in genau diesem speziellen Fall nachvollziehen, ständige
Nachverfolgung der TLDs ist Pflicht, z.T. hat man vielleicht keinen Zugriff mehr
auf abgelieferte Auftragsarbeiten.
(gibt es TLDs, die mehr als 6 Zeichen haben?).
MudGuard: Neue Toplevel-Domains (im Test)
Dieser Thread zeigt, wie sinnlos eine willkürliche, wenn auch zum aktuellen
Zeitpunkt anscheinend sinnvolle Obergrenze gehalten ist. Er zeigt auch, warum
es nicht sinnvoll ist, die Zeichenklasse, aus der die Zeichen kommen dürfen,
einzuschränken. Wenn diese TLDs in Betrieb gehen, darf der Benutzer solcher
TLDs erwarten, seine Mail-Adresse auch in der ihm geläufigen Schrift
einzugeben - und nicht in Punycode buchstabieren zu müssen.
Also ganz einfach: Weg mit dieser Einschränkung. Raus aus den Prüfungen!
Ob weitere Fehler enthalten sind, kann und will ich nicht beurteilen.
Wäre aber interessant zu wissen.
da stimme ich Dir zu und verweise aber noch auf folgende zwei interessante
Archivpostings zu diesem Thema:
Cheatah: </archiv/2006/9/t136418/#m885959>
mit interessanter gültiger Mailadresse gegen Ende des Postings.
Einen Knackpunkt der gültigen Adresse hat Mathias Brodala übrigens
übersehen: @ kann in E-Mail-Adressen mehr als einmal vorkommen :-)
Sven Rautenberg: </2005/6/t110127/#m689859>
Freundliche Grüße
Vinzenz
Hey Vinzenz.
Danke für das Raussuchen der relevanten Threads und Postings. Wenn ich Zeit habe, schaue ich mir den FA mal an, und versuche, so viel wie möglich einzuarbeiten bzw. werde den Artikel um verschiedene "Beachten Sie" ergänzen. Siehe Ticket #329.
Weiterhin bitte ich Dich, solche Dinge künftig als neues Ticket anzulegen, damit solche wertvollen Informationen nicht im Forumsalltag untergehen.
Siechfred
Danke für das Raussuchen der relevanten Threads und Postings.
Danke auch von mir! Ich finde, dieser Thread ist ein schönes Beispiel dafür, wie man zukünftig im SELFHTML-Blog eine Forumsauslese machen könnte, also Inhalte und Diskussionen bündeln könnte, die sich hier im Forum ergeben.
Sobald der aktuelle Perl-Artikel im Blog eingewirkt ist/hat - toller Artikel, er verdient noch ein bis zwei Tage alleinige Aufmerksamkeit -, werde ich so ein Posting mal im Blog absetzen.
Viele Grüße!
_ds
Moin Moin!
http://perldoc.perl.org/perlfaq9.html#How-do-I-check-a-valid-mail-address%3F könnte hilfreich sein, ebenso http://www.cpan.org/authors/Tom_Christiansen/scripts/ckaddr.gz, http://faqs.org/rfcs/rfc2822.html und http://faqs.org/rfcs/rfc822.html.
Die RegExp im ckaddr-Script ist definitiv nichts für Weicheier. ;-)
Alexander
Hello,
Insgesamt wurde diese Problematik hier bereits oft diskutiert.
Viele beschränken ihre Überprüfung auf das Vorhandensein von @
und einem . irgendwo dahinter ...
Der Punkt "irgendwo dahinter" macht schon wieder die Anwendung in lokalen Netzen (einfachstes Beispiel: chef@localhost) unmöglich.
Genau ein "@" und _kein_ Zeilenumbruch sowie ggf. Auflistung anderer verbotener Zeichen ist theoretisch vollkommen ausreichend.
Gitl natürlich auch wieder nur, wenn nur ein Empfänger pro Mail gewünscht wird.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin!
Insgesamt wurde diese Problematik hier bereits oft diskutiert.
Viele beschränken ihre Überprüfung auf das Vorhandensein von @
und einem . irgendwo dahinter ...Der Punkt "irgendwo dahinter" macht schon wieder die Anwendung in lokalen Netzen (einfachstes Beispiel: chef@localhost) unmöglich.
Dein Einwand zieht nicht. Ich habe noch nirgendwo Intranets gesehen, die keine mehrstufige Domainbezeichnung genutzt haben. Irgendwas in der Form "firma.intern" oder so war grundsätzlich im Spiel.
Und das hat durchaus handfeste technische Gründe. Unter anderem speichern Browser keine Cookies, wenn die Domain der Website nicht eine Mindestanzahl an Punkten enthält.
Abgesehen davon ist es mehr als ungewöhnlich, wenn man für interne Mails Sonderadressen nutzen würde - die gesamte Mailkommunikation mit der Außenwelt läuft über öffentliche Adressen mit mehrteiligem Domainbezeichner, warum soll man das im Inneren ausgerechnet weglassen?
Dieses Szenario greift also eigentlich nur in dem unwahrscheinlichen Fall, wenn wirklich nur allerwinzigste, rudimentäre Netzfunktionen eingerichtet sind. Und in so einem Sonderfall glaube ich, dass der Programmierer eines Webformulars mit Mailpflichtfeld schon soweit denken kann, dass lokale Mails nach dem @ keine Punkte haben.
Für alle Internet-Anwendungen hat garantiert mindestens ein Punkt hinter dem @ zu stehen.
- Sven Rautenberg
Hello,
Dein Einwand zieht nicht. Ich habe noch nirgendwo Intranets gesehen, die keine mehrstufige Domainbezeichnung genutzt haben.
Ich schon.
Aber es ist eher ein theoretisches Szenario, wenn man Dein Argument mit den "öffentlichen eMail-Adressen" auch berücksichtigt
Und das hat durchaus handfeste technische Gründe. Unter anderem speichern Browser keine Cookies, wenn die Domain der Website nicht eine Mindestanzahl an Punkten enthält.
Seit wasnn ist das so? Welche Versionen welcher Browser?
Gibt es dazu niedergeschreibene Empfehlungen oder Richtlinien (RFC o.ä.)?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin!
Und das hat durchaus handfeste technische Gründe. Unter anderem speichern Browser keine Cookies, wenn die Domain der Website nicht eine Mindestanzahl an Punkten enthält.
Seit wasnn ist das so? Welche Versionen welcher Browser?
Seit Cookies erfunden wurden.
Gibt es dazu niedergeschreibene Empfehlungen oder Richtlinien (RFC o.ä.)?
Das Recherchieren mit Google kannst du selbst.
- Sven Rautenberg
Hello,
Und das hat durchaus handfeste technische Gründe. Unter anderem speichern Browser keine
Cookies, wenn die Domain der Website nicht eine Mindestanzahl an Punkten enthält.
Und Mail-Clients?
Gibt es dazu niedergeschriebene Empfehlungen oder Richtlinien (RFC o.ä.)?
http://www.ietf.org/rfc/rfc2109.txt
OK, beim Zugriff auf die Domain mittels HTTP-Client soll ein Punkt vorhanden sein...
Ich kann mich aber nicht daran erinnern, dass die IEs mir jemals Probleme gemacht haben, wenn ich mit PHP Sessions auf "http://testserver" benutzt habe. Auch der Firefox hat da bisher die Cookies gespeichert und wieder mitgesandt.
Woran könnte das denn liegen?
Setzen sich die Browserhersteller einfach über die RFC hinweg?
Oder liegt es daran, dass der Name in eine IP aus dem lokalen Netz aufgelöst wird?
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hello out there!
Abgesehen davon ist es mehr als ungewöhnlich, wenn man für interne Mails Sonderadressen nutzen würde
Eine Mail an den Nutzer "foo" innerhalb desselben Netzes "example.net" muss nicht an "foo@example.net" adressiert sein; es genügt "foo". (abhängig vom Netz?)
Kein '.' in der Adresse; nicht einmal ein '@'.
See ya up the road,
Gunnar
Moin Moin!
Es geht noch besser:
dummy@example.com
RFC 2606 sagt, dass die Domain example.com (und ein paar andere) für Beispiele reserviert ist. Alle Mail-Adressen @example.com sind zwar technisch gültig, werden aber keinen sinnvollen Empfänger erreichen (die Domains sind auf die IANA registriert).
Auch eine RegExp, die die TLD nur auf erlaubte Buchstaben und gewisse Längen überprüft, wird auf die Nase fallen:
dummy@hotmail.invalid, dummy@spamschleuder.test, und dummy@morespam.example werden keine Empfänger finden.
Alexander
Hello,
Abgesehen davon ist es mehr als ungewöhnlich, wenn man für interne Mails Sonderadressen nutzen würde
Eine Mail an den Nutzer "foo" innerhalb desselben Netzes "example.net" muss nicht an "foo@example.net" adressiert sein; es genügt "foo". (abhängig vom Netz?)
Kein '.' in der Adresse; nicht einmal ein '@'.
Das gilt aber nur für sendmail und seine Brüder, nicht für rautenberg ;-))
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo,
vorab muss ich gestehen, ich habe 0-Ahnung von PHP. Dennoch
poste ich hier mein Anliegen, ggf. kann selbst mir ja geholfen
werden :-(Bei der Eingabe einer eMail-Adresse möchte ich, dass diese wenigsten
auf das "@" geprüft wird. Derzeit erhalte ich nur eine Fehler-
meldung, wenn nichts im Feld eingegeben wird, ansonsten wird alles
angenommen. Wo genau muss ich den ( für mich noch nichtbekannten )
Code einbinden bzw. modifizieren ?Für jede Hilfe bin ich dankbar !
Gruß JürgenSkript:
.....................................................................// FORMULAR ZU ANMELDEN
if ($action=="" and $admin=="") {
print $welcome;print '<form method="POST" action="'.$url.'?action=add">
E-Mailadresse:<br>
<input type="text" name="email" size="16" maxlength="32"><br>
Name:<br>
<input type="text" name="name" size="16" maxlength="22"><br>
<br>
<input type="submit" value="Anmeldung" name="B1">
</form>';}
#####################################################
// ADRESSE HINZUFÜGEN
if ($action=="add") {
if ($email=="" || $email==" "){
print $emailleer;
} else {
if (mysql_num_rows(mysql_query("SELECT * FROM $tabellenname WHERE Email = '$email'"))>=1) {
print $mailvorhanden;
} else {
mysql_query("INSERT INTO$tabellenname
VALUES ('$email', '$name', '0')")
or die ("Fehler beim Eintragen in die Datenbank!");
mail($email, "Newsletter-Bestätigung", $message_best, "From: $emailadresse");
print $bestaetigung;
}
}}
Ersteinmal zu ein paar "Fehlern:"
if ($email=="" || $email==" "){
print $emailleer;
Die erste Zeile mit "" und " " ist nicht unbedingt ein Fehler, man kanns aber auch wesentlich eleganter lösen.
Nämlich mit empty oder !empty.
Wie kannst du den Fehlercode $emailleer ausgeben lassen (bzw. die Variable) wenn du sie vorher überhaupt nicht definiert hast?!
Du musst unbedingt vor dieses "print $emailleer;" z.B. schreiben:
$emaileer = "Dein Text. Z.B.: Bitte eine korrekte e-Mailadresse angeben!";
und dann kommt dein print $emailleer;
if ($action=="add") {
wo ist denn "add" festgelegt? Nirgendwo!
Nimm doch: if($_POST['B1'])......
So und eine e-Mail überprüft man z.B. mit "ereg."
Außerdem finde ich bei der Eingabe von: "email überprüfung php"
bei Google mind. 2.250.000 Einträge. Wovon ja mindestens 1er zum Thema sein wird, nech?? ;)
SUCHEN!
http://www.google.de/search?q=email+%C3%BCberpr%C3%BCfung+php&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a
http://gidf.de
Hallo Jürgen und ihr anderen Diskutanten,
zum Thema E-Mail-Adressen-Überprüfung mit PHP.
Dank Schürs Blogpst bin ich auf diese Diskussion aufmerksam geworden.
Ich hab mich extra durch den ganzen Thread geklickt, um zu dem Ergebnis zu kommen, daß mein Link zumindest in dieser Diskussion bisher nicht genannt wurde, weswegen ich ihn nun mal einwerfe. Im Archiv hab ich nach dem Link nun nicht gesucht, insofern kann ich nicht ausschließen, daß er schon gelegentlich genannt wurde, aber zumindest hier direkt noch nicht.
Meist sollte ja irgendeine "Grob-Prüfung" ausreichen, im Zweifel kann man ja bei wichtigeren Anwendungen auch "Aktivierungs-Mails" verschicken.
Als ich einige Monate bei FamilyOne arbeitete habe ich einmal von einem Kollegen einen Link zugeschickt bekommen, der durchaus hilfreich sein kann. Wenn man also mal "wirklich" prüfen will ob eine angegebene E-Mail-Adresse tatsächlich existiert, dann könnte man sich PHP Email address validation with Verify probe mal genauer anschauen. Natürlich kann es auch da Probleme geben, aber es ist eine vielleicht durchaus akzeptable Möglichkeit viele Müll-Adressen zu erkennen und nicht zuzulassen.
Ob eine E-Mail-Adresse dem gehört, der sie angibt läßt sich sowieso nie prüfen.
Grüße aus Stockholm,
Götz
Moin Moin!
ob eine angegebene E-Mail-Adresse tatsächlich existiert, dann könnte man sich PHP Email address validation with Verify probe mal genauer anschauen.
Um nochmal etwas Salz in die Wunde zu streuen (außer der Tatsache, dass die Verifikation standardmäßig nur mit einer RegExp passiert): Kein Mailserver muß Auskunft geben, ob eine Mail-Adresse existiert. Das SMTP-Kommando EXPN ist vielfach abgeschaltet, sei es für Datenschutz, Spamschutz, oder weil erst ein nachgeschalteter Mailserver die Empfänger überhaupt kennt. Kein Mailserver muß zügig antworten. Greylisting ist ein bewährtes und verbreitetes Mittel gegen Spam, Fremdlinge werden ggf. erstmal laaaaaaaaaaange hingehalten, nur um ihnen dann mitzuteilen, es doch später nochmal zu versuchen. Wiederholte Zugriffsversuche machen das Ranking des Fremden nur noch schlechter. All das ist für eine interaktive Überprüfung von Mail-Adressen tödlich.
Alexander