E-Mail Überprüfung

chrisdo

Aktives Mitglied
Was haltet Ihr von diesem Vorschlag zur Überprüfung einer E-Mailadrese?

CODE <?
function check_email ($email) {
if(!ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $email))
return false;
else {
$emailsplit = split("@",$email,2);
$host = $emailsplit[1];
$fp = @fsockopen ("www.$host", 80);
if (!$fp) return false;
else return true;
}
}
?>


1. Wird natürlich mit den regulären Ausdrücken geprüft ob alles richtige Zeichen angegeben wurden.
2. Prüft er noch ob der Host existiert.

Was haltet Ihr davon?
 
Es kann doch sein, dass Server nur für Emails benutzt werden und der Port 80 garnicht offen ist.
Dann klappt auch die Verbindung mit fsockopen nicht und er würde dir melden, dass das nicht gültig ist, obwohl es gültig ist
wink.gif


Ich benutze immer die Funktion, ist zwar länger, aber die gibt auch noch zurück, was genau falsch ist:

CODE function check_mail($mail){

// $car -> list acceptable words
$car = "0123456789.abcdefghijklmnopqrstuvwxyz_@-";
// $ext -> list extension domain words
$ext = "abcdefghijklmnopqrstuvwxyz";

/**
* if you not use return(), is necesary to put elseif()
*/

if(ereg_words($car, $mail)) return "01"; // contain invalid caracter(s)
$expMail = explode("@", $mail);
if(count($expMail)==1) return "02"; // invalid format
if(count($expMail)>2) return "03"; // contain multi @ caracters
else{
if(empty($expMail[0])) return "04"; // begin at @ is empty
if(strlen($expMail[1])<3) return "05"; // after @ invalid format
$expSep = explode(".", $expMail[1]);
if(count($expSep)==1) return "06"; // invalid format domain host
else{
if(empty($expSep[count($expSep)-2])) return "07"; // domain name is empty
if(strlen($expSep[count($expSep)-1])<2 || strlen($expSep[count($expSep)-1])>4) return "08"; // invalid extension domain
if(ereg_words($ext, $expSep[count($expSep)-1])) return "09"; // extension domain contain invalid caracter(s)
}
}

return $mail;

} // End check_mail() -----------------------------------


function ereg_words($car, $data){
$err = false;
$cnt = strlen($data);
$len = strlen($car);
for($i=0;$i<$cnt;$i++){
$errm = false;
$chrm = strtolower($data{$i});
for($k=0;$k<$len;$k++) if($car{$k}==$chrm) $errm = true;
if(!$errm) $err = true;
}
return $err;
} // End ereg_words() -----------



Umlautdomains sind da aber noch nicht drin...
 
Hmm, ich blick da noch nicht richtig durch, was gibt es zurück wenn die E-Mail stimmt, und was gibt es zurück wenn die E-Mail nicht stimm?
 
Wenn die falsch ist, gibt er einen Fehlercode (von 01 bis 09) zurück, ansonsten die Emailaddy.
War aber nur das Beispiel, wie ich es nutze, deins reicht ja vollkommen.
Nur das mit dem Prüfen des Hostes würd ich mir mal überlegen
wink.gif
 
Hallo.

QUOTE (ChDo @ Do 30.12.2004, 11:54)[...]

if(!ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $email))

[...]

Nimm lieber die preg_match Funktion von PHP statt ereg, die wird wesendlich schneller abgearbeitet, dazu muss Du den regulären Ausdruck vielleicht etwas umschreiben.


MfG Sascha
 
QUOTE (ChDo @ Do 30.12.2004, 12:03)Was ich noch vergessen habe, vielleicht könnte man noch erweitern für Umlautdomains.

Können Umlaute auch vor dem @ sein? Wäre
CODE umlaute-äöü@öäü-domain.ch

eine gültige Mailadresse, oder können Umlaute nur im Domainnamen sein?

Theoretisch müsste man alle anderen möglichen Sonderzeichen auch noch berücksichtigen?

Hab bei selfhtml eine hübsche Funktion gefunden. Unterstützt aber Umlaute leider auch nicht.
 
QUOTE (oli181 @ Di 4.1.2005, 12:34) [...]
Theoretisch müsste man alle anderen möglichen Sonderzeichen auch noch berücksichtigen?
[...]

Auf jedenfall müssen alle möglichen Umlaute, welche im Punicode (dieserr hat nichts mit Unicode zu tun) erlaubt sind berücktsichtig werden. Bei den Umlauten muss auf jedenfall der hintere Teil berücksichtig werden. Genauere oder weitere Angaben kann ich bisher leider noch nicht geben und werde ich ich so schnell zu kommen, da ich im Moment meine Wehrpflicht verrichte.


MfG Sascha
 
Das Beste ist dann immer noch: manuel die E-Mailadresse überprüfen.
Was ja, wenn man z.B. wie ayom.com viele User hat, sehr lange dauert und es registrieren sich immer wieder neue User.
 
QUOTE (Sascha Ahlers @ Sa 8.1.2005, 19:41) Auf jedenfall müssen alle möglichen Umlaute, welche im Punicode (dieserr hat nichts mit Unicode zu tun) erlaubt sind

Ja, aber welche Zeichen, sind dies alles? Das Frage ich mich, dann könnte ich nämlich diese Zeichen auch noch im Script von Selfhtml implementieren und so wäre die Überprüfung ziemlich gut.


QUOTE Das Beste ist dann immer noch: manuel die E-mailadresse überprüfen.


Eine manuelle Überprüfung geht ja kaum bei einem Kontaktformular...
 
QUOTE (Oliver Hörler @ So 9.1.2005, 16:42) Eine manuelle Überprüfung geht ja kaum bei einem Kontaktformular...

Indirekt. Zur Sicherheiit kann man dem Besucher seine Eingaben noch einmal anzeigen (per PHP) und diese muss er akzeptieren und est dann wird die Mail abgeschickt.
 
QUOTE (Patzor @ So 9.1.2005, 19:35)
QUOTE (Oliver Hörler @ So 9.1.2005, 16:42) Eine manuelle Überprüfung geht ja kaum bei einem Kontaktformular...

Indirekt. Zur Sicherheiit kann man dem Besucher seine Eingaben noch einmal anzeigen (per PHP) und diese muss er akzeptieren und est dann wird die Mail abgeschickt.

Das wäre aber dann zu umständlich für ein Kontaktformular
 
QUOTE (Oliver Hörler @ So 9.1.2005, 16:42)
QUOTE (Sascha Ahlers @ Sa 8.1.2005, 19:41) Auf jedenfall müssen alle möglichen Umlaute, welche im Punicode (dieserr hat nichts mit Unicode zu tun) erlaubt sind

Ja, aber welche Zeichen, sind dies alles? Das Frage ich mich, dann könnte ich nämlich diese Zeichen auch noch im Script von Selfhtml implementieren und so wäre die Überprüfung ziemlich gut.


QUOTE Das Beste ist dann immer noch: manuel die E-mailadresse überprüfen.


Eine manuelle Überprüfung geht ja kaum bei einem Kontaktformular...

Das kann ich, wie gesagt, selber nicht sagen, danach suchen kannst Du doch wohl noch selber. Ich wurde Dir empfehlen in die entsprechende RFC zu Punicode zu schauen (zumind. würde ich so vorgehen).


Und mal ganz ehrlich, ein Kontaktformular ist schon schön und gut, doch da reicht es wohl auf @ und einen Punkt hinter dem @ zu kontrollieren, wenn man möchte auch Punicode relevante Zeichen und TDL relevante Endungen. Wobei es bisher keine TDL mit Umlauten existiert und wohl auch nicht so schnell existieren wird. Dies wird für die erste Zeit nur den Domainnamen betreffen.
Immerhin gibt es ein System zum übertragen von Nachrichten über das Internet, welches älter ist als das Web und HTTP und immer noch seinen Dienst erfüllt, die Nachrichten welche über dieses System übertragen wird, nennt man E-Mail.
Kontaktfomular sind auch eher für die A0L und M$N bzw. H0TMAIL Benutzergruppen gedacht, da diese etwas weiträumiger sofort nach /dev/null geleitet werden. ^^


MfG Sascha
 
Zurück
Oben