tobyman80 Posted December 16, 2008 Report Share Posted December 16, 2008 Hallo Zusammen. Ich habe folgendes Problem: Wenn ein Kunde eine falsche e-mail Adresse eingibt (einfach irgendwelche zeichen ohne @ und .de) kommt am Ende des Bestellvorganges eine hässliche Meldung vom SMTP Server dass die mail nicht an den Empfänger versendet werden kann. Das ist ja korrekt, aber kann man das nicht schon vorher abfangen? Habe die e-mail DNS überprüfung auf "true" gesetzt, das hat aber auch nicht geholfen. :-( Kann mir jemand weiterhelfen? Viele Grüsse und Danke schon mal Tobi Link to comment Share on other sites More sharing options...
tiny969 Posted December 17, 2008 Report Share Posted December 17, 2008 hallo! ich frage mich etwas ähnliches: ist es mit xt:commerce nicht möglich, dem kunden bei registrierung ein mail mit einem aktivierungslink zu senden? sprich, dass die kundendaten zwar gespeichert, das konto aber erst nach klick auf diesen link freigeschalten wird? Link to comment Share on other sites More sharing options...
wibros Posted December 17, 2008 Report Share Posted December 17, 2008 Von Haus aus: Nein. Kann man natürlich einbauen. Aber ich würde mir einen anderen Shop suchen, wenn ich erst das Konto aktivieren müsste bevor ich bestellen kann. Und die E-Mail-Adresse wird sehr wohl überprüft, ob sie zumindest von der Syntax her korrekt ist. Außer, man hat da irgendwo rumgeschraubt. Link to comment Share on other sites More sharing options...
tiny969 Posted December 17, 2008 Report Share Posted December 17, 2008 aha, ok, danke! gibts da irgendwo ein bsp wie so etwas umzusetzen wäre? ein tutorial, how-to, oder so? finde nichts... ein aktivierungs-mail ist lästig, ich weiss... möchte das aber gerne trotzdem als option in petto haben... danke nochmal! Link to comment Share on other sites More sharing options...
seeyou Posted December 17, 2008 Report Share Posted December 17, 2008 <?php $email = $_POST['email']; $email = preg_match("/[\.a-z0-9_-]+@[a-z0-9-]{2,}\.[a-z]{2,4}$/i",$email); if(!$email) { echo(" Bitte korrekte E-mail-adresse eingeben <br><a href='index.php'>nochmal</a>"); } if($email) { echo("passt schon "); } ?> Sagt aus: vor dem @ dürfen nur folgende Zeichen vorkommen: .a-z0-9_- das @ ist zwingend Notwendig nach dem @ dürfen nur folgende Zeichen vorkommen: a-z0-9- und die Topleveldomain muss mind 2 Zeichen haben ! zum testen die datein auf nen Server schmeissen.email.rar Link to comment Share on other sites More sharing options...
tobyman80 Posted December 17, 2008 Author Report Share Posted December 17, 2008 Wo im code finde ich denn die stelle an der der shop die mail adresse prüft. was müsste da stehen? ich weiß nicht genau ob da "rumgeschraubt" wurde. Danke und Gruß Link to comment Share on other sites More sharing options...
wibros Posted December 17, 2008 Report Share Posted December 17, 2008 Naja, eine neue Überprüfungsgeschichte einzubauen ist sicher nicht sinnvoll, noch dazu eine derart benutzerunfreundliche mit 'Zurück'-Link. Lieber Affenformular bauen bzw. das vorhandene Nutzen. Außerdem ist deine Endung auf 2-4 Zeichen limitiert => .museum wird als ungültig abgelehnt. Der Teil, der die E-Mail-Adresse prüft, sieht in create_account.php so aus: if (strlen($email_address) < ENTRY_EMAIL_ADDRESS_MIN_LENGTH) { $error = true; $messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR); } elseif (xtc_validate_email($email_address) == false) { $error = true; $messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_CHECK_ERROR); } else { $check_email_query = xtc_db_query("select count(*) as total from ".TABLE_CUSTOMERS." where customers_email_address = '".xtc_db_input($email_address)."' and account_type = '0'"); $check_email = xtc_db_fetch_array($check_email_query); if ($check_email['total'] > 0) { $error = true; $messageStack->add('create_account', ENTRY_EMAIL_ADDRESS_ERROR_EXISTS); } } [/php] xtc_validate_email() ist die Funktion, die die E-Mail-Adresse auf korrekte Syntax prüft. Link to comment Share on other sites More sharing options...
tobyman80 Posted December 19, 2008 Author Report Share Posted December 19, 2008 Hallo Wibros, also der Test auf Länge funktioniert. Habe im Adminbereich ein wenig mit den Werten gespielt. Nur wie sieht die Prüfung auf korrekte Syntax aus? Ich stelle mir vor dass überprüft wird ob ein @ vorhanden ist und ein . mit einer max 3stelligen endung. Ist meine Annahme falsch? Denn der shop akzeptiert zb die adresse xxxxxxx.de. Und dann kommt vom SMTP server eine hässliche fullscreen meldung. Gruß Toby Link to comment Share on other sites More sharing options...
wibros Posted December 19, 2008 Report Share Posted December 19, 2008 Da steckt ein bisschen mehr drin als nur das. Aber auf ein @ wird auf jeden Fall geprüft. Hast du die inc/xtc_validate_email.php mal aus einem originalen Paket reinkopiert? Link to comment Share on other sites More sharing options...
tobyman80 Posted December 19, 2008 Author Report Share Posted December 19, 2008 Ja das sollte die originale sein, hänge meine Datei mal hier an: 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; } ?>[/PHP] Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.