0
Thanks

A few words of thanks would be greatly appreciated.

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);
}




Thanks to P@ for this tip.
0
Thanks

A few words of thanks would be greatly appreciated.

Ask a question
Jean-François Pillou

CCM is a leading international tech website. Our content is written in collaboration with IT experts, under the direction of Jeff Pillou, founder of CCM.net. CCM reaches more than 50 million unique visitors per month and is available in 11 languages.

Learn more about the CCM team

Related

Published by . Latest update on by aakai1056.

This document, titled "PHP script to test the validity of email addresses," is available under the Creative Commons license. Any copy, reuse, or modification of the content should be sufficiently credited to CCM (https://ccm.net/).

0 Comments