Jürgen: eMail-Prüfung

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;
}
}

}

  1. he

    Hierfür kannst du preg_match verwenden.

    gruß bascombe

  2. vorab muss ich gestehen, ich habe 0-Ahnung von PHP.

    Christian Kruse hat. Du kannst seine eMail-Prüfung verwenden.

    Viele Grüße!
    _ds

    --
    »Die Bedienung eines Coffee Houses ist recht einfach. Es gibt keine. Man bestellt stattdessen direkt an der Theke.«
    - Top 5-Blog, Verhalten im Coffee House
    1. 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

      1. 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

        --
        »In Wedding sitzt man nur dann öffentlich mit einem Laptop auf der Straße herum, wenn man Boss einer kriminellen Jugendbande ist und es soeben geklaut hat.«
        - Das kleine Seitenschwein, Chinatown
      2. 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

        --
        Coping With Scoping (Deutsche Übersetzung)
        Als Moderator habe ich keinerlei Humor, von dem ich wüsste.
        1. 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}'; zu my $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

          1. 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

            --
            Coping With Scoping (Deutsche Übersetzung)
            Als Moderator habe ich keinerlei Humor, von dem ich wüsste.
            1. 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

              --
              »Sollten Sie nach der Bestellung eines Getränks neuerdings nach ihrem Namen gefragt werden, reagieren Sie nicht mit einem "Warum?"; selbst wenn das der Punkt 1 dieser nachfolgenden Liste sein wird.«
              - Top 5-Blog, Verhalten im Coffee House, Teil 2
              1. 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

                --
                Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      3. 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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. 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

          --
          "Love your nation - respect the others."
          1. 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

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

            1. 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

              --
              "Love your nation - respect the others."
              1. 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

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          2. 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

            --
            „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
            1. 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

              --
              Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
            2. 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

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  3. 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;
    }
    }

    }

    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

  4. 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

    --
    Losung für Freitag, 2. November 2007
    O Herr, hilf! O Herr, lass wohlgelingen! (Psalm 118,25)
    Paulus schreibt: Ich habe gepflanzt, Apollos hat begossen; aber Gott hat das Gedeihen gegeben. (1.Korinther 3,6)
    (Herrnhuter Losungen)
    1. 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

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".