Monday, 24 November 2014

PHP script to test the validity of email addresses

Issue

I wonder if there is a PHP solution (or other) to test the validity of an email address? 

Solution

Try this: 
function validate_email($email){
   $mailparts=explode("@",$email);
   $hostname = $mailparts[1];

   // validate email address syntax
   $exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
   $b_valid_syntax=eregi($exp, $email);

   // get mx addresses by getmxrr
   $b_mx_avail=getmxrr( $hostname, $mx_records, $mx_weight );
   $b_server_found=0;

   if($b_valid_syntax && $b_mx_avail){
     // copy mx records and weight into array $mxs
     $mxs=array();


     for($i=0;$i<count($mx_records);$i++){
     $em1 = array_pop($mx_weight);
     $em2 = array_pop($mx_records);
       $mxs[$em1]=$em2;
     }

     // sort array mxs to get servers with highest prio
     ksort ($mxs, SORT_NUMERIC );
     reset ($mxs);

     while (list ($mx_weight, $mx_host) = each ($mxs) ) {
       if($b_server_found == 0){

         //try connection on port 25
         $fp = @fsockopen($mx_host,25, $errno, $errstr, 2);
         if($fp){
           $ms_resp="";
           // say HELO to mailserver
           $ms_resp.=send_command($fp, "HELO microsoft.com");

           // initialize sending mail
           $ms_resp.=send_command($fp, "MAIL FROM:<support@microsoft.com>");

           // try receipent address, will return 250 when ok..
           $rcpt_text=send_command($fp, "RCPT TO:<".$email.">");
           $ms_resp.=$rcpt_text;
          
           if(substr( $rcpt_text, 0, 3) == "250")
             $b_server_found=1;

           // quit mail server connection
           $ms_resp.=send_command($fp, "QUIT");

         fclose($fp);

         }

       }
   }
  }
  return $b_server_found;
}

function send_command($fp, $out){

  fwrite($fp, $out . "\r\n");
  return get_data($fp);
}

function get_data($fp){
  $s="";
  stream_set_timeout($fp, 2);

  for($i=0;$i<2;$i++)
   $s.=fgets($fp, 1024);

  return $s;
}

// support windows platforms
if (!function_exists ('getmxrr') ) {
  function getmxrr($hostname, &$mxhosts, &$mxweight) {
   if (!is_array ($mxhosts) ) {
     $mxhosts = array ();
   }

   if (!empty ($hostname) ) {
     $output = "";
     @exec ("nslookup.exe -type=MX $hostname.", $output);
     $imx=-1;

     foreach ($output as $line) {
       $imx++;
       $parts = "";
       if (preg_match ("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.*)$/", $line, $parts) ) {
         $mxweight[$imx] = $parts[1];
         $mxhosts[$imx] = $parts[2];
       }
     }
     return ($imx!=-1);
   }
   return false;
  }
}


et l'appelle toujours :
Function ControleContact($email,$nomorganization,$service,$fonction){
 $msg="";
  $email = trim($email);  
 if(empty($nomorganization)):
  $msg .= "Le champs <B>Nom de l'organization</B> est obligatoire<BR>";
 endif;
 if(!is_string($nomorganization))
  $msg .= "Le champs <B>Nom de l'organization</B> doit être une chaine de caractére<BR>";
 if(empty($service))
  $msg .= "Au moins une case <B>service</B> doit être cochée<BR>";
 if(empty($fonction))
  $msg .= "Une <B>fonction</B> doit être séléctionnée<BR>";
 if(empty($email))
    $msg .="Le champ <B>email</B> est obligatoire<BR>";
  elseif(!ereg("^(.+)@(.+)\\.(.+)$",$email))
    $msg .="Le champ <B>email</B> est obligatoire 22<BR>";
  elseif(validate_email($email) == 0) {
    echo 'Invalid email address!';
    $msg .='Invalid email address!';
    }
  else {
     echo 'Email address is valid';
    }    
 return ($msg);
}

0 comments:

Post a Comment