Advertisement
cyberkatze

isEmal verification function

Jul 6th, 2011
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.74 KB | None | 0 0
  1. <?php
  2. function isEmail($email, $check_mx = true) {
  3.     // all characters except @ and whitespace
  4.     $name = '[^@\s]+';
  5.  
  6.     // letters, numbers, hyphens separated by a period
  7.     $sub_domain = '[-a-z0-9]+\.';
  8.  
  9.     // country codes
  10.     $cc = '[a-z]{2}';
  11.  
  12.     // top level domains
  13.     $tlds = "$cc|com|net|edu|org|gov|mil|int|biz|pro|info|arpa|aero|coop|name|museum";
  14.  
  15.     $email_pattern = "/^$name@($sub_domain)+($tlds)$/ix";
  16.  
  17.     if (preg_match($email_pattern, $email, $check_pieces)) {
  18.         // check mail exchange or DNS
  19.         if ($check_mx) {
  20.             $host = substr(strstr($check_pieces[0], '@'), 1);
  21.             if (in_array($host, $skip_check)) {
  22.                 return true;
  23.             }
  24.  
  25.             //Check DNS records
  26.             if(checkdnsrr($host, "MX")) {
  27.                 if(!getmxrr($host, $mxhost, $mxweight)) {
  28.                     return false;
  29.                 }
  30.             } else {
  31.                 $mxhost[] = $host;
  32.                 $mxweight[] = 1;
  33.             }
  34.  
  35.             $weighted_host = array();
  36.             for($i = 0; $i < count($mxhost); $i ++) {
  37.                 $weighted_host[($mxweight[$i])] = $mxhost[$i];
  38.             }
  39.             ksort($weighted_host);
  40.  
  41.             foreach($weighted_host as $host) {
  42.                 if (!($fp = @fsockopen($host, 25, $errno, $errstr))) {
  43.                     continue;
  44.                 }
  45.  
  46.                 $stopTime = time() + 12;
  47.                 $gotResponse = FALSE;
  48.                 stream_set_blocking($fp, FALSE);
  49.  
  50.                 while(true) {
  51.                     $strresp = fgets($fp, 1024);
  52.                     if(substr($strresp, 0, 3) == "220") {
  53.                         $stopTime = time() + 12;
  54.                         $gotResponse = true;
  55.                     } elseif (($strresp == "") && ($gotResponse)) {
  56.                         break;
  57.                     } elseif(time() > $stopTime) {
  58.                         break;
  59.                     }
  60.                 }
  61.                 if(!$gotResponse) {
  62.                     continue;
  63.                 }
  64.                 stream_set_blocking($fp, true);
  65.  
  66.                 fputs($fp, "HELO {$_SERVER['SERVER_NAME']}\r\n");
  67.                 fgets($fp, 1024);
  68.  
  69.                 fputs($fp, "MAIL FROM: <httpd@{$_SERVER['SERVER_NAME']}>\r\n");
  70.                 fgets($fp, 1024);
  71.  
  72.                 fputs($fp, "RCPT TO: <$email>\r\n");
  73.                 $line = fgets($fp, 1024);
  74.  
  75.                 fputs($fp, "QUIT\r\n");
  76.  
  77.                 fclose($fp);
  78.                 if(substr($line, 0, 3) != "250") {
  79.                     return false;
  80.                 } else {
  81.                     return true;
  82.                 }
  83.             }
  84.             return false;
  85.         }
  86.         return true;
  87.     }
  88.     return false;
  89. }
  90. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement