Samuel Vogel: email äuserlich überprüfen

Gude,

Ich mach gard ein Newsletter-Script und dabei ist es natürlich nützlich die email-Addy äuserlich auf ihre Güligkeit zu überprüfen!
Jetzt hab ich beim http://www.dclp-faq.de/q/q-mail-adresse-gueltig.html nachgeschaut und da steht auch ein Link zu einer ensprechenden Klasse welche eine email-Addy sehr zuverlässig überprüft. Aber ich seh keinen Link um den Code zu bekommen oder sie downzuloaden. Kann mir jemand helfen, oder erklären warum es keinen gibt?

samy,

  1. Hi Samuel,

    Ich mach gard ein Newsletter-Script und dabei ist es natürlich nützlich die email-Addy äuserlich auf ihre Güligkeit zu überprüfen!

    Richtig, wobei man nur dann 100%ig sicher sein kann, ob sie exisitiert, wenn man die gib-mir-deine-EMail-Adresse-ich-schick-dir-das-Passwort-zu Methode anwendet ;-)

    Jetzt hab ich beim http://www.dclp-faq.de/q/q-mail-adresse-gueltig.html nachgeschaut und da steht auch ein Link zu einer ensprechenden Klasse welche eine email-Addy sehr zuverlässig überprüft. Aber ich seh keinen Link um den Code zu bekommen oder sie downzuloaden. Kann mir jemand helfen, oder erklären warum es keinen gibt?

    Soweit ich das gesehen habe, ist das irgendein Zusatzmodul oder so. Egal, dass hier klappt auch ziemlich gut:

    function check_email($email) {
      // RegEx begin
      $nonascii      = "\x80-\xff"; # Non-ASCII-Chars are not allowed

    $nqtext        = "[^\\$nonascii\015\012"]";
      $qchar         = "\\[^$nonascii]";

    $protocol      = '(?:mailto:)';

    $normuser      = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
      $quotedstring  = ""(?:$nqtext|$qchar)+"";
      $user_part     = "(?:$normuser|$quotedstring)";

    $dom_mainpart  = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
      $dom_subpart   = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
      $dom_tldpart   = '[a-zA-Z]{2,5}';
      $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";

    $regex         = "$protocol?$user_part@$domain_part";
      // RegEx end

    return preg_match("/^$regex$/",$email);

    }

    Stammt aus ... Gute Frage, aus SelfPHP glaube ich.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
    Zufällige Hinweise:
    ------------------------
    Probleme mit Formularen?
    http://tutorial.riehle-web.com hilft weiter.
    1. Moin!

      function check_email($email) {
        // RegEx begin
        $nonascii      = "\x80-\xff"; # Non-ASCII-Chars are not allowed

      $nqtext        = "[^\\$nonascii\015\012"]";
        $qchar         = "\\[^$nonascii]";

      $protocol      = '(?:mailto:)';

      $normuser      = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
        $quotedstring  = ""(?:$nqtext|$qchar)+"";
        $user_part     = "(?:$normuser|$quotedstring)";

      $dom_mainpart  = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
        $dom_subpart   = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
        $dom_tldpart   = '[a-zA-Z]{2,5}';
        $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";

      $regex         = "$protocol?$user_part@$domain_part";
        // RegEx end

      return preg_match("/^$regex$/",$email);

      }

      Unbrauchbar. Top-Level-Domains haben mittlerweile mehr als zwei bis fünf Zeichen. Außerdem sind Unterstriche "_" in Domainnamen nicht erlaubt.

      - Sven Rautenberg

      1. Hi Sven,

        $dom_tldpart   = '[a-zA-Z]{2,5}';
        Top-Level-Domains haben mittlerweile mehr als zwei bis fünf Zeichen.

        Dann halt $dom_tldpart = '[a-zA-Z]{2,8}';

        $dom_mainpart  = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
          $dom_subpart   = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
        Außerdem sind Unterstriche "_" in Domainnamen nicht erlaubt.

        Dann eben $dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9.-]*\.';
                  $dom_subpart  = '(?:[a-zA-Z0-9][a-zA-Z0-9.-]*\.)*';

        Und jetzt ;-) ?

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
        Zufällige Hinweise:
        ------------------------
        Wer die </faq/> gelesen hat, ist klueger!
        ... und wei wie man Links macht ;-)
        1. Moin!

          Dann halt $dom_tldpart = '[a-zA-Z]{2,8}';

          Und jetzt ;-) ?

          Warten wir auf die erste TLD, die länger als 8 Zeichen ist. Und du dich nicht mehr erinnerst, wo überall du deinen regulären Ausdruck schon eingesetzt hast, um ihn dann zu ändern. Sofern du an die entsprechenden Systeme überhaupt noch rankommst - manchmal hat man ja Kunden, die irgendwann keine Kunden mehr sind.

          - Sven Rautenberg

          1. Hi Sven,

            Warten wir auf die erste TLD, die länger als 8 Zeichen ist. Und du dich nicht mehr erinnerst, wo überall du deinen regulären Ausdruck schon eingesetzt hast, um ihn dann zu ändern. Sofern du an die entsprechenden Systeme überhaupt noch rankommst - manchmal hat man ja Kunden, die irgendwann keine Kunden mehr sind.

            Gut, das überzeugt micht *g*

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
            Zufällige Hinweise:
            ------------------------
            Wer die </faq/> gelesen hat, ist klueger!
            ... und wei wie man Links macht ;-)
          2. Hallo.

            Sofern du an die entsprechenden Systeme überhaupt noch rankommst - manchmal hat man ja Kunden, die irgendwann keine Kunden mehr sind.

            Einhergehend mit Problemen, die dann auch keine Probleme mehr sind.
            MfG, at

            1. Moin!

              Sofern du an die entsprechenden Systeme überhaupt noch rankommst - manchmal hat man ja Kunden, die irgendwann keine Kunden mehr sind.

              Einhergehend mit Problemen, die dann auch keine Probleme mehr sind.

              Ich denke, man hat auch nachträglich immer noch einen Ruf zu verlieren. Beziehungsweise kann sich durch gute Arbeit auch nachträglich immer noch empfehlen. Ex-Kunden sind das ja nicht immer nur deswegen, weil die Zusammenarbeit grausam gescheitert ist.

              Und da ist es deshalb kein Nachteil, wenn gewisse Systeme dauerhaft gut funktionieren, und sich nicht durch dumme, schwer nachvollziehbare Probleme hervorheben, deren Behebung mit Pech einigen negativen Wirbel verursachen.

              - Sven Rautenberg

              1. Hallo.

                Ich denke, man hat auch nachträglich immer noch einen Ruf zu verlieren. Beziehungsweise kann sich durch gute Arbeit auch nachträglich immer noch empfehlen. Ex-Kunden sind das ja nicht immer nur deswegen, weil die Zusammenarbeit grausam gescheitert ist.

                Das ist ein wichtiger Punkt, den ich auch nicht negieren wollte.

                Und da ist es deshalb kein Nachteil, wenn gewisse Systeme dauerhaft gut funktionieren, und sich nicht durch dumme, schwer nachvollziehbare Probleme hervorheben, deren Behebung mit Pech einigen negativen Wirbel verursachen.

                Du hast das Problem doch innerhalb sehr kurzer Zeit lokalisieren können. Dazu wäre auch der Nachfolger unseres Fachmannes in der Lage, wenn er eine hinreichend aussagekräftige Dokumentation oder zumindest Kommentierung vorfindet. Existiert eine solche nicht, verliert der ursprüngliche Entwickler seinen guten Ruf zu Recht. Versteht der Kunde aber zu wenig von der Materie, kann ihm der Nachfolger jedes Märchen über seinen Vorgänger auftischen -- gute Arbeit hin oder her.
                MfG, at

      2. Hallo Sven,

        Unbrauchbar...

        das stammt aus den Tipps und Tricks eines Vereins Namens Selfhtml. Wenn Du einen Redakteur für diesen Bereich kennst, sprich ihn doch mal an, ob das Script nicht überarbeitet werden könnte ;-)

        Gruß, Andreas

        --
        <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
        hier könnte auch ruhig mal'n neues Bild stehen.
  2. Moin!
    suchst dzu sowas?:
    <?php
    eregi("[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$mailadresse])
    ?>
    tschü ichen

    --
    Selfcode: sh:( fo:| br: n4:& ie:% mo:| mo:| de:] zu:) fl:| ss:| ls:[ js:|

    1. _.0-9a-z- ↩︎

    1. Moin!

      suchst dzu sowas?:
      <?php
      eregi("[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$mailadresse])
      ?>

      Unbrauchbar. Top-Level-Domains haben mittlerweile mehr als zwei oder drei Zeichen.

      - Sven Rautenberg


      1. _.0-9a-z- ↩︎

  3. hi,

    Jetzt hab ich beim http://www.dclp-faq.de/q/q-mail-adresse-gueltig.html nachgeschaut und da steht auch ein Link zu einer ensprechenden Klasse welche eine email-Addy sehr zuverlässig überprüft. Aber ich seh keinen Link um den Code zu bekommen oder sie downzuloaden.

    müsste doch in einer der unter http://pear.php.net/packages.php?catpid=14&catname=Mail aufgelisteten enthalten sein, denke ich - vermutlich in der ersten, die sich schlicht "mail" nennt.

    ... jepp, wenn ich mir deren dokumentation ansehe http://pear.php.net/package/Mail/docs/1.1.3/, dann wird dort rechts im menü unter "classes" auch die von dir gesuchte "Mail_RFC822" gelistet.

    gruß,
    wahsaga

    --
    I'll try being nicer if you'll try being smarter.
  4. Moin!

    Ich mach gard ein Newsletter-Script und dabei ist es natürlich nützlich die email-Addy äuserlich auf ihre Güligkeit zu überprüfen!

    Nein. Bei einem Newsletterscript ist es nützlich, die Adressen auf ihre TATSÄCHLICHE Gültigkeit zu prüfen.

    Du glaubst nicht, was für Idioten es auf dieser Welt gibt. Tippfehler beim Usernamen-Anteil der Mailadresse sind noch die kleinste Sorge (betrifft vor allem die Zeitgenossen, welche etwas kompliziertere Vor- und Nachnamen haben - da kann man schon mal ins Stolpern kommen auf seiner Tastatur).

    Gerne genommen wird auch die Angabe einer noch nicht (wann dann?) oder nicht mehr existierenden Domain. Da fragt man sich doch, wie diese Leute sonst Mails mit ihrer Adresse empfangen.

    Und als Krönung: Es gibt auch DNS-Admins, die als MX (MaileXchange - der Server, der die Mails annehmen soll) für die Domain "localhost.domain.tld" eintragen, und "localhost.domain.tld" dann auf 127.0.0.1 auflösen. Das ist wirklich eine erstaunliche Leistung. Wahrscheinlich kriegen die Jungs keinerlei Spam und freuen sich tierisch.

    Um diesen ganzen Problemen, die sich für dich allesamt nur auf "Die Mail bounct irgendwie" reduziert, aus dem Wege zu gehen, und weil du bei einer Newsletteranmeldung sowieso eine Bestätigungsmail versenden mußt, ohne deren Bestätigung du den Newsletterversand sowieso nicht beginnen lassen solltest (es sei denn, du stehst auf mit Sicherheit verlorene Abmahnprozesse), empfiehlt es sich, diese Bestätigungsmail am Besten von einem PHP-Skript DIREKT an den Empfänger-Mailserver laut Adresse auszuliefern, und dessen Reaktion abzufragen. Dann kannst du dem Benutzer, der das Eintragungsformular gerade abgeschickt hat, sofort Feedback geben, ob die genannte Mailadresse unakzeptabel war.

    Natürlich fallen die Mailserver durchs Raster, die zwar als Domain existieren, aber leider grundsätzlich erstmal alle Mails annehmen, und im Nichtexistenzfall einer Adresse dann eine Bounce-Meldung rausschicken. Solche Mailsysteme sind zum Glück immer seltener, aber leider existieren sie noch. Sie werden vermutlich nach und nach aufgrund öffentlichen Drucks geändert werden, weil man sie auch wunderbar als Mailbombe einsetzen kann.

    Für so eine Vorgehensweise muß dein Skript allerdings etwas SMTP sprechen. Ich persönlich finde dieses Protokoll nicht wirklich schwer, man kann es per Hand mittels Telnet auch "sprechen". Dummerweise habe ich noch nichts vorgefertigtes gefunden (wenngleich das PEAR-Paket Mail wohl auch direkt SMTP als Versand nutzen kann, neben der mail()-Funktion und dem sendmail-Aufruf), du müßtest also selber suchen - oder selber machen. :)

    Jetzt hab ich beim http://www.dclp-faq.de/q/q-mail-adresse-gueltig.html nachgeschaut und da steht auch ein Link zu einer ensprechenden Klasse welche eine email-Addy sehr zuverlässig überprüft. Aber ich seh keinen Link um den Code zu bekommen oder sie downzuloaden. Kann mir jemand helfen, oder erklären warum es keinen gibt?

    PEAR ist eine Sammlung von Klassen, welche in der Regel standardmäßig mit PHP ausgeliefert und installiert werden.

    Wenn die Klassen nicht verfügbar sind, kann man sie als ganz normale Datei includen (und natürlich auch einzeln herunterladen). Für das oben genannte Mail-Package wäre der Link zum Download http://pear.php.net/package/Mail/download - du hast anscheinend nur nicht ausgiebig genug rumgesucht. :)

    - Sven Rautenberg