Controleren of het emailadres ook echt bestaat

Gepost door Icebear op 05-04-2009 11:26.

Als de dominen op dezelfde (shared)(dedicated)server zitten dan controleert hij enkel of het domeinnaam bestaat en kan hij niet controleren of die emailbox daadwerkelijk zelf ook bestaat.

Voor de rest ben ik nog geen valkuilen tegengekomen.

Enkel nadelen:
- werkt enkel nog op een niet windows omgeving

Bestanden van dit script

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<form action="" method="post">
            <input type="text" name="check" value="<?php if(isset($_POST["check"]))
echo($_POST["check"])?>" style="width: 274px; height: 24px;" />
            <input type="submit" value="Verify" />
</form>

<?php
if(isset($_POST["check"]))
{

$res = CheckMail(trim($_POST["check"]));
if (substr($res[0],0,3) == "250")
      echo("<strong>Result</strong>: Ok"); 
    else 
    {
      echo("<strong>Result</strong>: Bad"); 
      echo("<br/><br/> Description: ".$res[0]);
    }  
    
echo("<br/><br/><strong>Log:</strong><br/>");
$d = $res[2];
$d = str_replace("<","&lt;", $d);
$d = str_replace(">","&gt;", $d);
$d = str_replace("\r","<br/>", $d);
echo($d);

      
}



function CheckMail($Email) 
{ 
   $HTTP_HOST = $_SERVER["HTTP_HOST"];
   $FROM = "check@example.com";

   $Return = array();  
  
   if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $Email)) 
   { 
       $Return[0] = "Bad Syntax";         
       return $Return; 
   }     

   // $Username : username
   // $Domain : example.com 
   // list function reference : http://www.php.net/manual/en/function.list.php 
   // split function reference : http://www.php.net/manual/en/function.split.php 
   list ( $Username, $Domain ) = split ("@",$Email); 

   // That MX(mail exchanger) record exists in domain check . 
   // checkdnsrr function reference : http://www.php.net/manual/en/function.checkdnsrr.php 
   if ( checkdnsrr ( $Domain, "MX" ) )  
   { 
       $log .= "MX record about {$Domain} exists.\r"; 
       // If MX record exists, save MX record address. 
       // getmxrr function reference : http://www.php.net/manual/en/function.getmxrr.php 
       if ( getmxrr ($Domain, $MXHost))  
       {              
       //      for ( $i = 0,$j = 1; $i < count ( $MXHost ); $i++,$j++ ) 
       //      { 
       //          $log .= "$MXHost[$i]\r";                  
       //      } 
       } 
       //$log .= "\r";
       // Getmxrr function does to store MX record address about $Domain in arrangement form to $MXHost. 
       // $ConnectAddress socket connection address. 
       $ConnectAddress = $MXHost[0]; 
       
       
       // fsockopen function reference : http://www.php.net/manual/en/function.fsockopen.php 
   $Connect = fsockopen ( $ConnectAddress, 25 ); 
      $Return[1] = $ConnectAddress;
      
   // Success in socket connection 
   if ($Connect)   
   { 
        $log .= "Connection succeeded to {$ConnectAddress} SMTP.\r"; 
       // Judgment is that service is preparing though begin by 220 getting string after connection . 
       // fgets function reference : http://www.php.net/manual/en/function.fgets.php 
       if ( ereg ( "^220", $reply = fgets ( $Connect, 1024 ) ) ) 
       { 
           $log .= $reply."\r";
           // Inform client's reaching to server who connect. 
           fputs ( $Connect, "HELO ". $HTTP_HOST ."\r\n" ); 
               $log .=  "> HELO ". $HTTP_HOST ."\r"; 
           $reply = fgets ( $Connect, 1024 ); // Receive server's answering cord. 
               $log .= $reply."\r";                  

           // Inform sender's address to server. 
           fputs ( $Connect, "MAIL FROM: <". $FROM .">\r\n" ); 
               $log .=  "> MAIL FROM: <". $FROM .">\r"; 
           $reply = fgets ( $Connect, 1024 ); // Receive server's answering cord. 
               $log .= "=".$reply."\r";    
           // Inform listener's address to server. 
           fputs ( $Connect, "RCPT TO: <{$Email}>\r\n" ); 
               $log .= "> RCPT TO: <{$Email}>\r"; 
           $to_reply = fgets ( $Connect, 1024 ); // Receive server's answering cord. 
               $log .= "=".$to_reply."\r";  
           // Finish connection. 
           fputs ( $Connect, "QUIT\r\n"); 
               //$log .=  "> QUIT\r"; 

           fclose($Connect); 
       } 
   } 
   // Failure in socket connection 
   else 
   { 
       $Return[0]="500 Can not connect E-Mail server ({$ConnectAddress}).";         
       return $Return; 
   } 
          
   } 
   else 
   { 
       // If there is no MX record simply @ to next time address socket connection do . 
       //$ConnectAddress = $Domain;    
       $to_reply = "Domain '{$Domain}' does not exist.\r";    
       $log .= "MX record about '{$Domain}' does not exist.\r"; 
   } 

        
   $Return[0]=$to_reply;     
   $Return[2]=$log;

   return $Return; 
}
?>

Commentaar

05-04-2009 15:16

Ziet er leuk uit, maar bij mijn primaire emailadres krijg ik:
Result: Bad
Description: 550 Email blocked by SORBS - to unblock see http://www.example.com/

De rest van m'n adressen doet hij prima. :)

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
09-04-2009 09:50

"Enkel nadelen:
- werkt enkel nog op een niet windows omgeving"

Erg jammer ;)
Het lijkt me leuk om dit soort dingen te testen, maar ik heb simpelweg geen tijd om een heel linux (of dergelijk) systeem op te zetten.

1
2
3
4
5
6
7
<?php

if(! compatible_with('Windows') ) {
  echo 'Helaas!';
}

?>
Inloggen wachtwoord vergeten? Aanmelden