# E-Mailadresse auf Existenz überprüfen



## SolarStern (4. Februar 2004)

Wie schon im Betreff schon erwähnt, gibt es eine Möglichkeit die E-Mailaddi auf Existenz zu überprüfen?

Und zusätzlich noch ne andere Frage: Mit der PHP-mail-Funktion kann man mit einer Zeile ja eine E-Mail verschicken. Wie funktioniert diese Funktion eigentlich? Muß der Computer, beziehungsweise das Betriebssystem oder der Browser eine aktuelle Konfiguration besitzen um diese Funktion ausführen zu können oder ist die Sache in PHP integriert und funktioniert ohne POP3 Server des jenigen, der die Funktion ausführen tut?

CYA

Alexander


----------



## JohannesR (4. Februar 2004)

Ja, die gibt es... Erstmal kann man checken, ob die Domain existiert (getmxrr()).
Wenn das der Fall ist kannst du mit dem Mailserver in verbindung treten und mithilfe der SMTP-Befehle erfragen, ob es die Adresse gibt!


----------



## JohannesR (4. Februar 2004)

> _Original geschrieben von SolarStern _
> *Und zusätzlich noch ne andere Frage: Mit der PHP-mail-Funktion kann man mit einer Zeile ja eine E-Mail verschicken. Wie funktioniert diese Funktion eigentlich? Muß der Computer, beziehungsweise das Betriebssystem oder der Browser eine aktuelle Konfiguration besitzen um diese Funktion ausführen zu können oder ist die Sache in PHP integriert und funktioniert ohne POP3 Server des jenigen, der die Funktion ausführen tut?*


Ja, du musst einen funktionierenden SMTP-Server besitzen, und den Host oder die IP des Servers in die php.ini eintragen!


----------



## Gumbo (4. Februar 2004)

Versuch mal dies:

```
<?php
  function CheckEmail($email) {
    $domain = NULL;
    $mxlist = NULL;
    list($user, $domain) = split("@", $email, 2);
    getmxrr($domain, $mxlist);
    $return = array(false, "Kein Mailer.");
    foreach($mxlist as $mx) {
      $fp = fsockopen($mx, 25, $errno, $errstr, 20);
      if(!$fp) continue;
      socket_set_blocking($fp, false);
      $s = 0;
      $c = 0;
      $out = "";
      do {
        $out = fgets($fp, 2500);
        if(ereg("^220", $out)) {
          $s = 0;
          $out = "";
          $c++;
        } else {
          if(($c>0) && ($out=="")) break;
          else $s++;
        }
        if($s==9999) break;
      }
      while($out=="");
      socket_set_blocking ($fp, true);
      fputs ($fp, "HELO mrx\n" );
      $out = fgets($fp, 3000);
      fputs ($fp, "MAIL FROM: anonymous@doesnotexist.com\n" );
      $out = fgets($fp, 3000);
      fputs($fp, "RCPT TO: $email\n");
      $out = fgets($fp, 3000);
      if(ereg("^250", $out)) {
        $return = array(true,$out);
      } else {
        $return = array(false,$out);
      }
      fputs($fp, "quit\n");
      fclose($fp);
      if($return[0]) break;
    }
    return $return;
  }
  $ret = CheckEMail("benutzer@adresse.de");
  echo("$ret[0] $ret[1]");
?>
```


----------



## SolarStern (4. Februar 2004)

Danke, hat mir geholfen


----------



## Ben Ben (4. Februar 2004)

@johannes: ich hatte dazu mal ein fertiges Script von Zend. Das Problem war nur, dass es scheinbar Domains gibgt, die einen (für mein Verständnis falschen) MX-Eintrag haben, da laut MX-Auskunft emails von einer Domain nicht existieren, dies aber durchaus tun und somit ist die Existenzprüfung hinfällig :-\


----------



## SolarStern (4. Februar 2004)

Ehrlich gesagt ist mir das jetzt zu hoch. Was meinst du mit MX-Eintrag wenn ich Fragen darf?

Ich habe den Quellcode nun etwas verändert und getestet und bemerkte, wenn die Addi richtig ist, beziehungsweise vorhanden, gibt es am Anfang der Stringausgabe immer ne 1. Ansonsten unterschiedliche andere Meldungen. Das dürfte doch bei diesem Quellcode doch ausreichend sein, oder?


CYA

Alexander


----------



## JohannesR (4. Februar 2004)

> _Original geschrieben von SolarStern _
> *Was meinst du mit MX-Eintrag wenn ich Fragen darf?*



MX = Mail Exchange, der Name ist Programm! 
Kann man z.B. mit 
	
	
	



```
$ dig MX tutorials.de
```
 herausfinden.


----------



## cocoon (4. Februar 2004)

Ich habe in einem Buch einen sehr ausführlichen Test stehen. Allerdings ist der wohl auch ziemlich performance-lastig und es wird empfohlen, diesen wirklich nur bei Bedarf zu nutzen. I.d.R. sollte es doch genügen, die Adresse auf syntaktische Korrektheit zu überprüfen und ggf. die Domain zu kontrollieren. Ikea hatte glaub' ich mal eine kleine Funktion gepostet, die das leistet.


----------



## JohannesR (5. Februar 2004)

Prinzipiell ist es eh ein sinnloses unterfangen, spätestens seitdem es "wegwerfadressen" vom Spammotel gibt.


----------

