Re: code snippet to verify email addresses

From: Date: Mon, 17 Jul 2000 21:44:57 +0000
Subject: Re: code snippet to verify email addresses
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-6981@lists.php.net to get a copy of this message
yea - you're right. time for a rewrite. -Jeff J E F F R E Y M . W I L H E L M Phone: (860) 688-2976 Voice Mail: (860) 285-7779 x2811 Fax: (419) 735-8865 E-Mail: jeff@jjjweb.com Internet: http://www.jjjweb.com Read my Epinions at: http://www.epinions.com/user-jwilhelm ----- Original Message ----- From: "Monte Ohrt" <monte@ispi.net> To: "Jeff Wilhelm" <jeffwilhelm@hotmail.com> Cc: "Eric Wood" <eric@interplas.com>; "PHP List" <php-general@lists.php.net> Sent: Monday, July 17, 2000 4:34 PM Subject: Re: [PHP] code snippet to verify email addresses > Hmm, this one is not nearly complete as far as syntax checking goes. > It looks like it splits by "@", makes sure there are two parts, then > checks if the domain portion is valid and that the MX host responds. > > Many syntactially invalid e-mail addresses would pass right through > this test, such as "......@microsoft.com" > > Monte > > Jeff Wilhelm wrote: > > > > i ran across one a while ago that was very complete... i think i have it > > here somewhere.... yep. here it is: > > > > <? > > function MailVal($Addr, $Level, $Timeout = 15000) { > > > > // Valid Top-Level Domains > > $gTLDs = "com:net:org:edu:gov:mil:int:arpa:"; > > $CCs = > > "ad:ae:af:ag:ai:al:am:an:ao:aq:ar:as:at:au:aw:az:ba:bb:bd:be:bf:". > > > > "bg:bh:bi:bj:bm:bn:bo:br:bs:bt:bv:bw:by:bz:ca:cc:cf:cd:cg:ch:ci:". > > > > "ck:cl:cm:cn:co:cr:cs:cu:cv:cx:cy:cz:de:dj:dk:dm:do:dz:ec:ee:eg:". > > > > "eh:er:es:et:fi:fj:fk:fm:fo:fr:fx:ga:gb:gd:ge:gf:gh:gi:gl:gm:gn:". > > > > "gp:gq:gr:gs:gt:gu:gw:gy:hk:hm:hn:hr:ht:hu:id:ie:il:in:io:iq:ir:". > > > > "is:it:jm:jo:jp:ke:kg:kh:ki:km:kn:kp:kr:kw:ky:kz:la:lb:lc:li:lk:". > > > > "lr:ls:lt:lu:lv:ly:ma:mc:md:mg:mh:mk:ml:mm:mn:mo:mp:mq:mr:ms:mt:". > > > > "mu:mv:mw:mx:my:mz:na:nc:ne:nf:ng:ni:nl:no:np:nr:nt:nu:nz:om:pa:". > > > > "pe:pf:pg:ph:pk:pl:pm:pn:pr:pt:pw:py:qa:re:ro:ru:rw:sa:sb:sc:sd:". > > > > "se:sg:sh:si:sj:sk:sl:sm:sn:so:sr:st:su:sv:sy:sz:tc:td:tf:tg:th:". > > > > "tj:tk:tm:tn:to:tp:tr:tt:tv:tw:tz:ua:ug:uk:um:us:uy:uz:va:vc:ve:". > > "vg:vi:vn:vu:wf:ws:ye:yt:yu:za:zm:zr:zw:"; > > > > // The countries can have their own 'TLDs', e.g. mydomain.com.au > > $cTLDs = "com:net:org:edu:gov:mil:co:ne:or:ed:go:mi:"; > > > > $fail = 0; > > > > // Shift the address to lowercase to simplify checking > > $Addr = strtolower($Addr); > > > > // Split the Address into user and domain parts > > $UD = explode("@", $Addr); > > if (sizeof($UD) != 2) $fail = 1; > > > > // Split the domain part into its Levels > > $Levels = explode(".", $UD[1]); $sLevels = sizeof($Levels); > > if ($sLevels < 2) $fail = 1; > > > > // Get the TLD, strip off trailing ] } ) > and check the length > > $tld = $Levels[$sLevels-1]; > > $tld = ereg_replace("[>)}]$|]$", "", $tld); > > if (strlen($tld) < 2 || strlen($tld) > 3 && $tld != "arpa") > > $fail = 1; > > > > $Level--; > > > > // If the string after the last dot isn't in the generic TLDs or country > > codes, it's invalid. > > if ($Level && !$fail) { > > $Level--; > > if (!ereg($tld.":", $gTLDs) && !ereg($tld.":", $CCs)) > > $fail = 2; > > } > > > > // If it's a country code, check for a country TLD; add on the domain name. > > if ($Level && !$fail) { > > $cd = $sLevels - 2; $domain = $Levels[$cd].".".$tld; > > if (ereg($Levels[$cd].":", $cTLDs)) { $cd--; $domain = > > $Levels[$cd].".".$domain; } > > } > > > > // See if there's an MX record for the domain > > if ($Level && !$fail) { > > $Level--; > > if (!getmxrr($domain, $mxhosts, $weight)) $fail = 3; > > } > > > > // Attempt to connect to port 25 on an MX host > > if ($Level && !$fail) { > > $Level--; > > while (!$sh && list($nul, $mxhost) = each($mxhosts)) > > $sh = fsockopen($mxhost, 25); > > if (!$sh) $fail = 4; > > } > > > > // See if anyone answers > > if ($Level && !$fail) { > > $Level--; > > set_socket_blocking($sh, false); > > $out = ""; $t = 0; > > while ($t++ < $Timeout && !$out) > > $out = fgets($sh, 256); > > if (!ereg("^220", $out)) $fail = 5; > > } > > > > if ($sh) fclose($sh); > > > > return $fail; > > } //MailVal > > ?> > > > > ----- Original Message ----- > > From: "Eric Wood" <eric@interplas.com> > > To: <php-general@lists.php.net> > > Sent: Monday, July 17, 2000 2:37 PM > > Subject: [PHP] code snippet to verify email addresses > > > > > Anyone have a code snippet they would give me to verify that an email > > > address is syntactically correct? > > > > > > Thanks, > > > -Eric Wood > > > > > > > > > > > > > > > -- > > > PHP General Mailing List (http://www.php.net/) > > > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > > > For additional commands, e-mail: php-general-help@lists.php.net > > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > > > > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > > For additional commands, e-mail: php-general-help@lists.php.net > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > -- > Monte Ohrt <monte@ispi.net> > http://www.ispi.net/ > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net > For additional commands, e-mail: php-general-help@lists.php.net > To contact the list administrators, e-mail: php-list-admin@lists.php.net > >

« previous php.general (#6981) next »