Jump to content
xt:Commerce Community Forum

Überprüfung der e-mail Adresse


tobyman80

Recommended Posts

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

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

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

<?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

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

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

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

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...