Zend - The PHP Company




Validation

Add Code


Clever Email Validation Function  

Type: code fragment
Added by: ifsnow2
Entered: 06/02/2001
Last modified: 01/11/2007
Rating: **** (39 votes)
Views: 64131
E-Mail validation function with an eregi expression and socket connection.


<? 
/* ======================================================================= 
   
 ifsnow's email valid check function SnowCheckMail Ver 0.1 
  
 funtion SnowCheckMail ($Email,$Debug=false) 

 $Email : E-Mail address to check. 
 $Debug : Variable for debugging. 

 * Can use everybody if use without changing the name of function. 

 Reference : O'REILLY - Internet Email Programming 

 HOMEPAGE : http://www.hellophp.com 

 ifsnow is korean phper. Is sorry to be unskillful to English. *^^*;; 

========================================================================= */ 

function SnowCheckMail($Email,$Debug=false

    global 
$HTTP_HOST
    
$Return =array();  
    
// Variable for return. 
    // $Return[0] : [true|false] 
    // $Return[1] : Processing result save. 

    
if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$"$Email)) { 
        
$Return[0]=false
        
$Return[1]="${Email} is E-Mail form that is not right."
        if (
$Debug) echo "Error : {$Email} is E-Mail form that is not right.<br>";         
        return 
$Return
    } 
    else if (
$Debug) echo "Confirmation : {$Email} is E-Mail form that is not right.<br>"

    
// E-Mail @ by 2 by standard divide. if it is $Email this "lsm@ebeecomm.com".. 
    // $Username : lsm 
    // $Domain : ebeecomm.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" ) )  { 
        if(
$Debug) echo "Confirmation : MX record about {$Domain} exists.<br>"
        
// If MX record exists, save MX record address. 
        // getmxrr function reference : http://www.php.net/manual/en/function.getmxrr.php 
        
if ( getmxrr ($Domain$MXHost))  { 
      if(
$Debug) { 
                echo 
"Confirmation : Is confirming address by MX LOOKUP.<br>"
              for ( 
$i 0,$j 1$i count $MXHost ); $i++,$j++ ) { 
            echo 
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result($j) - $MXHost[$i]<BR>";  
        } 
            } 
        } 
        
// Getmxrr function does to store MX record address about $Domain in arrangement form to $MXHost. 
        // $ConnectAddress socket connection address. 
        
$ConnectAddress $MXHost[0]; 
    } 
    else { 
        
// If there is no MX record simply @ to next time address socket connection do . 
        
$ConnectAddress $Domain;         
        if (
$Debug) echo "Confirmation : MX record about {$Domain} does not exist.<br>"
    } 

    
// fsockopen function reference : http://www.php.net/manual/en/function.fsockopen.php 
    
$Connect fsockopen $ConnectAddress25 ); 

    
// Success in socket connection 
    
if ($Connect)   
    { 
        if (
$Debug) echo "Connection succeeded to {$ConnectAddress} SMTP.<br>"
        
// 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"$Out fgets $Connect1024 ) ) ) { 
             
            
// Inform client's reaching to server who connect. 
            
fputs $Connect"HELO $HTTP_HOSTrn); 
                if (
$Debug) echo "Run : HELO $HTTP_HOST<br>"
            
$Out fgets $Connect1024 ); // Receive server's answering cord. 

            // Inform sender's address to server. 
            
fputs $Connect"MAIL FROM: <{$Email}>rn" ); 
                if (
$Debug) echo "Run : MAIL FROM: &lt;{$Email}&gt;<br>"
            
$From fgets $Connect1024 ); // Receive server's answering cord. 

            // Inform listener's address to server. 
            
fputs $Connect"RCPT TO: <{$Email}>rn" ); 
                if (
$Debug) echo "Run : RCPT TO: &lt;{$Email}&gt;<br>"
            
$To fgets $Connect1024 ); // Receive server's answering cord. 

            // Finish connection. 
            
fputs $Connect"QUITrn"); 
                if (
$Debug) echo "Run : QUIT<br>"

            
fclose($Connect); 

                
// Server's answering cord about MAIL and TO command checks. 
                // Server about listener's address reacts to 550 codes if there does not exist  
                // checking that mailbox is in own E-Mail account. 
                
if ( !ereg "^250"$From ) || !ereg "^250"$To )) { 
                    
$Return[0]=false
                    
$Return[1]="${Email} is address done not admit in E-Mail server."
                    if (
$Debug) echo "{$Email} is address done not admit in E-Mail server.<br>"
                    return 
$Return
                } 
        } 
    } 
    
// Failure in socket connection 
    
else { 
        
$Return[0]=false
        
$Return[1]="Can not connect E-Mail server ({$ConnectAddress})."
        if (
$Debug) echo "Can not connect E-Mail server ({$ConnectAddress}).<br>"
        return 
$Return
    } 
    
$Return[0]=true
    
$Return[1]="{$Email} is E-Mail address that there is no any problem."
    return 
$Return

?> 


Usage Example


See the example


Rate This Script





Search



This Category All Categories