Re: code snippet to verify email addresses
| From: | Monte Ohrt | Date: | Mon, 17 Jul 2000 20:34:34 +0000 |
| Subject: | Re: code snippet to verify email addresses | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-6973@lists.php.net to get a copy of this message | ||
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/