E-Mail adressen Validieren

Ich hatte mal ein Skript, welches aktiv die Adresse eines users validierte (Anfrage beim E-Mail-Server, ob Adresse existent). Das hat aber "ewig" lange gedauert und war "in realtime" nicht wirklich umzusetzen. Es handelte sich dabei um eine Kunde wirbt Kunde Seite.
 
shockshell hat gesagt.:
Ich hatte mal ein Skript, welches aktiv die Adresse eines users validierte (Anfrage beim E-Mail-Server, ob Adresse existent). Das hat aber "ewig" lange gedauert und war "in realtime" nicht wirklich umzusetzen. Es handelte sich dabei um eine Kunde wirbt Kunde Seite.

Wie bereits erwähnt wurde, sagt die Validität einer E-Mailadresse nichts darüber aus ob du es auch mit ihrem rechtmäßigen Besitzer zu tun hast.
Das solltest du daher unbedingt per Mail prüfen.

Des weiteren gibt es auch keine bessere Möglichkeit zum Testen der Valität:
Wird der Link angeklickt, war sie wohl valide.

Die neuen Sonderzeichenregelungen in Domainnamen machen es mittlerweile beinahe unmöglich eine Mail-Adresse mit Garantie zu überprüfen (du solltest dabei vorallem bedenken, dass jede TLD ihre eigenen Regeln hat: manche Einträge müssen mindestens 2, andere mindestens 3 Zeichen lang sein; andere wiederum dürfen nicht aus Zahlen bestehen oder mit Zahlen anfangen u.s.w.)

Wenn du auf all diese Faktoren Rücksicht nehmen willst, wird dein RegEx 3 A4-Seiten lang und muss täglich aktualisiert werden.

Außerdem solltest du dich nicht darauf verlassen, dass du beim Mailserver Auskunft über die Gültigkeit einer Adresse erhältst. AFAIK ignorieren viele Server solche Anfragen um SPAM zu vermeiden.


MfG. xxenon
 
Hallo,
ich habe in diesem Zusammenhang auch eine Frage:
Einfaches Shopsystem,Standard-Szenario.
Der Kunde bestellt und erhält mit mail() unsere Kontodaten usw. und wir bekommen die Nachricht über die Bestellung.
Wenn der Kunde sich bei seiner eMail- Adresse verschrieben hat, ist sie zwar gültig nach den zuvor genannten Regeln, aber er bekommt natürlich keine Daten aus dem Shop.
Das Problem für uns ist: Mir gelingt es nicht, die return-mail (Mail delivery failed: returning message to sender....) die ja irgendwie generiert wird, zu erhalten, damit wir wissen, dass keine Daten übermittelt werden konnten.
Obwohl als Absender im Header unsere Mailadresse eingetragen ist. kommt dort nichts an.
Was mache ich falsch?
 
also ich verwende diese funktion aus xtcommerce. das überprüft ob der syntax der email stimmt.
PHP:
<?php
/* -----------------------------------------------------------------------------------------
   $Id: xtc_validate_email.inc.php,v 1.1 2003/09/06 21:47:50 fanta2k Exp $   

   XT-Commerce - community made shopping
   http://www.xt-commerce.com

   Copyright (c) 2003 XT-Commerce
   -----------------------------------------------------------------------------------------
   based on: 
   (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
   (c) 2002-2003 osCommerce(validations.php,v 1.11 2003/02/11); www.oscommerce.com 
   (c) 2003	 nextcommerce (xtc_validate_email.inc.php,v 1.5 2003/08/14); www.nextcommerce.org

   Released under the GNU General Public License 
   ---------------------------------------------------------------------------------------*/

  ////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Function    : xtc_validate_email
  //
  // Arguments   : email   email address to be checked
  //
  // Return      : true  - valid email address
  //               false - invalid email address
  //
  // Description : function for validating email address that conforms to RFC 822 specs
  //
  //               This function is converted from a JavaScript written by
  //               Sandeep V. Tamhankar (stamhankar@hotmail.com). The original JavaScript
  //               is available at http://javascript.internet.com
  //
  // Sample Valid Addresses:
  //
  //    first.last@host.com
  //    firstlast@host.to
  //    "first last"@host.com
  //    "first@last"@host.com
  //    first-last@host.com
  //    first.last@[123.123.123.123]
  //
  // Invalid Addresses:
  //
  //    first last@host.com
  //
  //
  ////////////////////////////////////////////////////////////////////////////////////////////////

  function xtc_validate_email($email) {
    $valid_address = true;

    $mail_pat = '^(.+)@(.+)$';
    $valid_chars = "[^] \(\)<>@,;:\.\\\"\[]";
    $atom = "$valid_chars+";
    $quoted_user='(\"[^\"]*\")';
    $word = "($atom|$quoted_user)";
    $user_pat = "^$word(\.$word)*$";
    $ip_domain_pat='^\[([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\]$';
    $domain_pat = "^$atom(\.$atom)*$";

    if (eregi($mail_pat, $email, $components)) {
      $user = $components[1];
      $domain = $components[2];
      // validate user
      if (eregi($user_pat, $user)) {
        // validate domain
        if (eregi($ip_domain_pat, $domain, $ip_components)) {
          // this is an IP address
      	  for ($i=1;$i<=4;$i++) {
      	    if ($ip_components[$i] > 255) {
      	      $valid_address = false;
      	      break;
      	    }
          }
        } else {
          // Domain is a name, not an IP
          if (eregi($domain_pat, $domain)) {
            /* domain name seems valid, but now make sure that it ends in a valid TLD or ccTLD
               and that there's a hostname preceding the domain or country. */
            $domain_components = explode(".", $domain);
            // Make sure there's a host name preceding the domain.
            if (sizeof($domain_components) < 2) {
              $valid_address = false;
            } else {
              $top_level_domain = strtolower($domain_components[sizeof($domain_components)-1]);
              // Allow all 2-letter TLDs (ccTLDs)
              if (eregi('^[a-z][a-z]$', $top_level_domain) != 1) {
                $tld_pattern = '';
                // Get authorized TLDs from text file
                $tlds = file(DIR_FS_INC.'tld.txt');
                while (list(,$line) = each($tlds)) {
                  // Get rid of comments
                  $words = explode('#', $line);
                  $tld = trim($words[0]);
                  // TLDs should be 3 letters or more
                  if (eregi('^[a-z]{3,}$', $tld) == 1) {
                    $tld_pattern .= '^' . $tld . '$|';
                  }
                }
                // Remove last '|'
                $tld_pattern = substr($tld_pattern, 0, -1);
                if (eregi("$tld_pattern", $top_level_domain) == 0) {
                    $valid_address = false;
                }
              }
            }
          } else {
      	    $valid_address = false;
      	  }
      	}
      } else {
        $valid_address = false;
      }
    } else {
      $valid_address = false;
    }
    if ($valid_address && ENTRY_EMAIL_ADDRESS_CHECK == 'true') {
      if (!checkdnsrr($domain, "MX") && !checkdnsrr($domain, "A")) {
        $valid_address = false;
      }
    }
    return $valid_address;
  }

?>
 
Ja, danke, aber das meine ich so nicht.
Wenn die Validierung der eMail-Adresse ok ist, sich der Kunde aber vertippt, bekomme ich bei Mailversand über mail() nicht mit, wenn die Nachricht abgewiesen wird.
Das möchte ich aber irgendwie erreichen.
 
Dann solltest du den Benutzer auffordern, die E-Mail-Adresse mehrfach einzugeben, wie es bereits bei vielen Registrierungen der Fall ist. Stimmen diese überein, wird es wohl die richtige Adresse sein.
 
Ja,das sollte helfen.
Danke

Mmhh,doch nicht so gut.
Die Auto-Vervollständigen-Einstellung hebt die "erzieherische" Massnahme der visuellen Kontrolle irgendwie wieder auf.
Noch 'ne Idee?
 
Zuletzt bearbeitet:
Wobei das autocomplete-Attribut proprietär ist, da es eine Microsoft-Erfindung ist und somit wahrscheinlich nur im Internet Explorer funktionieren wird.

In Web Forms 2.0 wird es jedoch wieder erwähnt, womit es möglicherweise zum Bestandteil eines Standards werden könnte.
 
Hallo!

Im Firefox funktioniert das Attribut auch. Ich habe es allerdings im Form-Tag gefunden:
<form action="xyz.php" method="post" autocomplete="off">

Mamphil
 
Zurück