Andreas: E-Mailadresse überprüfen ob gültig !!

Beitrag lesen

Hallo!

if(!empty($email)) {
   // domain pruefen
  if (!(strpos($email, "@") > 2) || !(strrpos($email, ".") > (strpos($email, "@") + 2)) || !(strlen(strrchr($email, ".")) >= 2) || !checkdnsrr (substr(strrchr($email, '@'), 1), 'MX')) {
         $fehlerausgabe .= "<li>keine gültige Domain für die e-Mailadresse angegeben";

Ganz trickreich, einfach den Nameserver abzufragen, ob er einen MX-Record für die Adresse enthält.

Aber so wie ich die Kommentare im Manual deute muß ein Mailserver nicht unbedingt einen MX-Eintrag besitzen! Ein Beispiel aus den Kommentaren:

if
(eregi("[1]([-_.]?[0-9a-z])*@[0-9a-z][-.0-9a-z]*\.[a-z]{2,3}[.]?$",
$string, $check)) {
 $host = substr(strstr($check[0], '@'), 1).".";
 if ( getmxrr($host, $validate_email_temp) )
  return TRUE;
 // THIS WILL CATCH DNSs THAT ARE NOT MX.
 if(checkdnsrr($host,"ANY"))
  return TRUE;
}
return FALSE;

Wobei mir der reguläre Ausdrucg _NICHT_ gefällt, aber er fragt zuerst nach MX-Einträgen des Hosts, danach aber noch nach _ANY_ anderen DNS Einträgen. Müssen das alle sein, oder reichen da nicht bestimmte?

Hier kommt eine Erklärung warum MX alleine nicht reicht und ein 2. Beispiel:

If this function is going to be used for e-mail validation purposes; Please
bear in mind that MX records are not mandatory and that RFC974 clearly
states: If no MX records exist for a given host, MTAs should interpret
this as if there is one MX RR matching the host itself. (I.e. you should
call gethostbyname() to see if the host has an A record.)

<?php
 $host=$host.".";
 if ( getmxrr( $host, $mxhosts ) == FALSE &&
      gethostbyname( $host ) == $host ) {
     echo "$host is not a valid e-mail host.";
  } else {
     echo "$host is a valid e-mail host.";
  }
?>

Dieses verstehe ich nicht so ganz. Er testet ob ein MX-Eintrag existiert, und wenn nicht ob der aufgelöste Host = dem zu prüfenden Host ist. Aber bringt das dann überhaupt noch was? Kann man das nicht besser beschränken?

Noch eine Frage: Wer wird mit getmxrr() .. abgefragt? Ist man darauf angewiesen das der Server selbst online ist, oder fragt man nur irgendwelche Namenserver ab, die "immer" online sind?

Zumindest reicht Steffis Version nicht aus, außerdem würde ich an Ihrere Stelle lieber positiv definieren was in einer Email Adresse stehen darf, denn umgekehrt erwischt man eh nicht alle Zeichen!

Viele Grüße
Andreas


  1. 0-9a-z_ ↩︎