cvs: phpweb /include email-validation.inc

From: Date: Thu, 01 Mar 2001 01:07:46 +0000
Subject: cvs: phpweb /include email-validation.inc
Groups: php.mirrors 
Request: Send a blank email to php-mirrors+get-4095@lists.php.net to get a copy of this message
jmcastagnetto Wed Feb 28 17:07:46 2001 EDT Modified files: /phpweb/include email-validation.inc Log: Simplified validation, w/o using getmxrr(). We just need to be more careful when editing the notes :-) Index: phpweb/include/email-validation.inc diff -u phpweb/include/email-validation.inc:1.3 phpweb/include/email-validation.inc:1.4 --- phpweb/include/email-validation.inc:1.3 Wed Feb 28 03:55:51 2001 +++ phpweb/include/email-validation.inc Wed Feb 28 17:07:46 2001 @@ -1,187 +1,26 @@ <?php -// using Manuel Lemos's email validation class /* - * email_validation.php - * - * @(#) $Header: /local/repository/phpweb/include/email-validation.inc,v 1.3 2001/02/28 11:55:51 jmcastagnetto Exp $ - * + * email_validation.inc + * $Id: email-validation.inc,v 1.4 2001/03/01 01:07:46 jmcastagnetto Exp $ */ -class email_validation_class -{ - var $email_regular_expression="^([-!#\$%&'*+./0-9=?A-Z^_a-z{|}~ ])+@([-!#\$%&'*+/0-9=?A-Z^_a-z{|}~ ]+\\.)+[a-zA-Z]{2,4}\$"; - var $timeout=0; - var $localhost=""; - var $localuser=""; - var $debug=0; - Function OutputDebug($message) - { - echo $message,"\n"; - } - - Function GetLine($connection) - { - for($line="";;) - { - if(feof($connection)) - return(0); - $line.=fgets($connection,100); - $length=strlen($line); - if($length>=2 - && substr($line,$length-2,2)=="\r\n") - { - $line=substr($line,0,$length-2); - if($this->debug) - $this->OutputDebug("< $line"); - return($line); - } - } - } - - Function PutLine($connection,$line) - { - if($this->debug) - $this->OutputDebug("> $line"); - return(fputs($connection,"$line\r\n")); - } - - Function ValidateEmailAddress($email) - { - return(eregi($this->email_regular_expression,$email)!=0); - } - - Function ValidateEmailHost($email,$hosts=0) - { - if(!$this->ValidateEmailAddress($email)) - return(0); - $user=strtok($email,"@"); - $domain=strtok(""); - if(GetMXRR($domain,&$hosts,&$weights)) - { - $mxhosts=array(); - for($host=0;$host<count($hosts);$host++) - $mxhosts[$weights[$host]]=$hosts[$host]; - KSort($mxhosts); - for(Reset($mxhosts),$host=0;$host<count($mxhosts);Next($mxhosts),$host++) - $hosts[$host]=$mxhosts[Key($mxhosts)]; - } - else - { - $hosts=array(); - if(strcmp(@gethostbyname($domain),$domain)!=0) - $hosts[]=$domain; - } - return(count($hosts)!=0); - } - - Function VerifyResultLines($connection,$code) - { - while(($line=$this->GetLine($connection))) - { - if(!strcmp(strtok($line," "),$code)) - return(1); - if(strcmp(strtok($line,"-"),$code)) - return(0); - } - return(-1); - } - - Function ValidateEmailBox($email) - { - if(!$this->ValidateEmailHost($email,&$hosts)) - return(0); - if(!strcmp($localhost=$this->localhost,"") - && !strcmp($localhost=getenv("SERVER_NAME"),"") - && !strcmp($localhost=getenv("HOST"),"")) - $localhost="localhost"; - if(!strcmp($localuser=$this->localuser,"") - && !strcmp($localuser=getenv("USERNAME"),"") - && !strcmp($localuser=getenv("USER"),"")) - $localuser="root"; - for($host=0;$host<count($hosts);$host++) - { - if($this->debug) - $this->OutputDebug("Connecting to host \"".$hosts[$host]."\"..."); - if(($connection=($this->timeout ? fsockopen($hosts[$host],25,&$errno,&$error,$this->timeout) : fsockopen($hosts[$host],25)))) - { - if($this->debug) - $this->OutputDebug("Connected."); - if($this->VerifyResultLines($connection,"220")>0 - && $this->PutLine($connection,"HELO $localhost") - && $this->VerifyResultLines($connection,"250")>0 - && $this->PutLine($connection,"MAIL FROM: <$localuser@$localhost>") - && $this->VerifyResultLines($connection,"250")>0 - && $this->PutLine($connection,"RCPT TO: <$email>") - && ($result=$this->VerifyResultLines($connection,"250"))>=0) - { - if($this->debug) - $this->OutputDebug("This host states that the address is ".($result ? "" : "not ")."valid."); - fclose($connection); - if($this->debug) - $this->OutputDebug("Disconnected."); - return($result); - } else { // Jesus M. Castagnetto - if($this->debug) - $this->OutputDebug("Unable to validate the address with this host."); - fclose($connection); - if($this->debug) - $this->OutputDebug("Disconnected."); - return false; - } - } - else - { - if($this->debug) - $this->OutputDebug("Failed."); - return false; // JMC - } - - } - return(-1); - } -}; - - -// checks that is an *outside* host, and removes the -// SPAM protection, before passing the address to the validation class - +// checks that is an *outside* host, and tries to remove anti-SPAM bits function clean_AntiSPAM ($email) { $remove_spam = "[-_]?(NO|I[-_]?HATE|DELETE|REMOVE)[-_]?(THIS)?(ME|SPAM)?[-_]?"; return eregi_replace($remove_spam,"",trim($email)); } -function is_emailable_address( $email, $debug=0 ) { +function is_emailable_address( $email) { $hosts_regex="lists\.php\.net|chek.*\.com"; $excluded_hosts = ereg($hosts_regex,$email); + $email_regex="^([-!#\$%&'*+./0-9=?A-Z^_a-z{|}~ ])+@([-!#\$%&'*+/0-9=?A-Z^_a-z{|}~ ]+\\.)+[a-zA-Z]{2,4}\$"; if (!$excluded_hosts && $email != "") { - $validator = new email_validation_class; - $validator->timeout=10; - $validator->debug=$debug; - return $validator->ValidateEmailBox($email); + return eregi($email_regex, $email); } else { return false; } } - -// test of the validation function -// remove this part once all changes seem to work -/* -$test_add = array ( - "wrong-email-address@lists.php.net","jcastagnetto@yahoo.com", - "some-wrong@asdas.com", "jcastagnetto-NO-SPAM@yahoo.com", - "jcastagnetto@NoSpam-yahoo.com", "jmcastagnetto@chek2.com", - "jcastagnetto-i-hate-spam@NOSPAMyahoo.com", - "asasasd324324@php.net", "jcastagnetto-delete-this-@yahoo.com", - "wrong-address-with@@@@-remove_me-and-some-i-hate_SPAM-stuff"); - -while (list(,$v) = each($test_add)) { - echo "The address: $v (".clean_AntiSpam($v).") is"; - if (!is_emailable_address(clean_AntiSPAM($v))) - echo " not"; - echo " valid\n"; -} -*/ ?>

« previous php.mirrors (#4095) next »