[PHP] maildomaincheck genau umgekehrt falsch ist richtig und richtig ist falsch

speedy00

Well-known member
28 April 2006
548
24
morgen ;)
ich hab mit meinem mailcheck ein kleines verdrehtes Probelm, richtig ist falsch und falsch ist richtig.

PHP:
function check_email($email) {
    
        if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) { 
            
            $host = explode('@', $email);
            
            if (!function_exists('checkdnsrr')) {
                function checkdnsrr($host, $type = '') {
                    if(!empty($host)) {
                        if($type == '') $type = "MX";
                        @exec("nslookup -type=$type $host", $output);
                        while(list($k, $line) = each($output)) {
                            if(eregi("^$host", $line)) {
                                return true;
                            }
                        }
                        return false;
                    }
                }
            }
            
            if(checkdnsrr($host[1].'.', 'MX') ) return true;
            if(checkdnsrr($host[1].'.', 'A') ) return true;
            if(checkdnsrr($host[1].'.', 'CNAME') ) return true;    
                    }
         return false;        
          }
 
Zuletzt bearbeitet:
Also nach Domaincheck sieht mir das nicht aus.. das ist eher ein Mailcheck? (so heißt ja auch die Funktion?)

Wenn du nur nen Mailcheck brauchst...
PHP:
function mailcheck($mail)
{
  $muster = "|^[a-zA-Z0-9][a-zA-Z0-9._-]*@[a-zA-Z0-9.]+\.[a-zA-Z]{2,6}$|";
  $erg = preg_match($muster, $mail);
  switch ($erg)
  {
    case 0:
    {
      return false;
    }
    case 1:
    {
      return true;
    }
    case false:
    {
      echo "Fehler bei Funktion preg_match()!";
      return false;
    }
  }
}
BTW: Bitte mal deinen Titel anpassen ;).
 
hier liegt mein Fehler auch nicht.
PHP:
if(check_email($email) & $email!="") {$fehler.="Emailadresse ist ungültig<br>";}
 
Zuletzt bearbeitet:
Wenn der Funktionsrückgabewert genau das Gegenteil is, dann musst du eben in jeder return-Anweisung den Bool-Wert invertieren ;)
 
Auf jedenfall, bin da schon dran, aber da ich da nicht so bewandert bin dauert das ein bisschen länger wie sonst. ;)
 
PHP:
<?php
function check_email($email) {
    
        if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) { 
            
            $host = explode('@', $email);
            
            if (!function_exists('checkdnsrr')) {
                function checkdnsrr($host, $type = '') {
                    if(!empty($host)) {
                        if($type == '') $type = "MX";
                        @exec("nslookup -type=$type $host", $output);
                        while(list($k, $line) = each($output)) {
                            if(eregi("^$host", $line)) {
                                return false;
                            }
                        }
                        return true;
                    }
                }
            }
            
            if(checkdnsrr($host[1].'.', 'MX') ) return false;
            if(checkdnsrr($host[1].'.', 'A') ) return false;
            if(checkdnsrr($host[1].'.', 'CNAME') ) return false;    
                    }
         return true;        
          }
Ich hab kA ob das nun so richtig ist oder nicht, aber so funktioniert es.
 
was stimmt oder stimmt denn nu nicht mit dem Script, es funktioniert obwohl ihr sagt es dürfte eigentlich nicht funktionieren.
 
was stimmt oder stimmt denn nu nicht mit dem Script, es funktioniert obwohl ihr sagt es dürfte eigentlich nicht funktionieren.
Das Problem ist folgendes:
Die angegeben eMail-Adressen werden angenommen. Ich hab es grade probiert.
Der RegExp ist, wie ZeroCCC schon treffend angedeutet hat, kompletter Non-Sense. Dein Script nimmt die Adresse - hab grade ".$$=$()§$(djdhdhzdh" getestet - an und führt die DNS-Abfrage durch.

Um den Fehler zu debuggen, korrigier deine Version mal so:
PHP:
/* ... */

            } 

            echo "DEBUG: Mailadressen-Syntax OK"; // <- einfügen zu Debug-Zwecken
            if(checkdnsrr($host[1].'.', 'MX') ) return false; 
            if(checkdnsrr($host[1].'.', 'A') ) return false; 
            if(checkdnsrr($host[1].'.', 'CNAME') ) return false;     
                    } 
         return true;         
          }
/* ... */
Du wirst sehen, dass die Funktion die Mailadresse als gültig annimmt und versucht den DNS abzufragen, obwohl tatsächlich ja totaler Müll als Adresse eingegeben wurde.