webForumDet fria alternativet

Kontrollera epostadresser

9 svar · 8 071 visningar · startad av sgtpepper

sgtpepperMedlem sedan apr. 20007 588 inlägg
#1

Liten kodsnutt som kollar att en epostadress stämmer på formen xxx@yyy.com och att domännamnet verkligen har en MX-pekare.

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">
$email = "hej@hopp.nu";

$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));
$okEmail = ($okEmail) && (getmxrr($check[1].$check[2],$temp));

if ($okEmail) 
  print "OK";
else
  print "your head will implode in 5..4..3..2..1 seconds";
</font>

------------------
"Common sense is the collection of prejudices acquired by age 18" - Albert Einstein

[Redigerat av sgtpepper den 25 okt 2000]

ForsbergMedlem sedan juni 200454 inlägg
#2

Jag modifierade sgtpepper's script en aning då jag märkte att Windowsutgåvan av PHP inte verkar ha något stöd för funktionen "".

Här är en funktion som fungerar under Windowsplattformar:

<?php

$email = "jag@gillar.glass";

function getmxrr($hostname, &$mxhosts)
{
   $mxhosts = array();
   exec('nslookup -type=mx '.$hostname, $result_arr);
   foreach($result_arr as $line) 
   {
     if (preg_match("/.*mail exchanger = (.*)/", $line, $matches)) 
         $mxhosts[] = $matches[1];
   }
   return( count($mxhosts) > 0 );
}

$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));
$okEmail = ($okEmail) && (getmxrr($check[1].$check[2],$temp));

if ($okEmail) {
  print "$email checked as OK! =)";
  exit;
}
else {
  print "$email is NOT a valid e-mail address since the host does not seem to have any MX-record!";
  exit;
}

?>

Tjim =)

K++Medlem sedan juli 2002171 inlägg
#3

Observera att scripten ovan inte fungerar för tex john@härnösand.nu.

CaineMedlem sedan nov. 200413 inlägg
#4

Hur gör man om man ska kunna ha 4 eller 5 bokstäver efter punkten?

HenrikAIMedlem sedan nov. 2004112 inlägg
#5

Caine skrev:

Hur gör man om man ska kunna ha 4 eller 5 bokstäver efter punkten?

Ändra {2,3} i nedanstående rad till {2,4} eller {2,5}.

$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));

K++ skrev:

Observera att scripten ovan inte fungerar för tex john@härnösand.nu.

Borde fungera om man ändrar alla 0-9a-z- till 0-9a-zåäö-.

CaineMedlem sedan nov. 200413 inlägg
#6

HenrikAI skrev:

Caine skrev:

Hur gör man om man ska kunna ha 4 eller 5 bokstäver efter punkten?

Ändra {2,3} i nedanstående rad till {2,4} eller {2,5}.

$okEmail = (isset($email) && strlen($email) > 5 && eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+([a-z]{2,3}$)",$email,$check));

Det funkar inte!

Har någon något annat förslag?

ChristianSMedlem sedan dec. 2004290 inlägg
#7

K++ skrev:

Observera att scripten ovan inte fungerar för tex john@härnösand.nu.

Huhm, på vilket sätt fungerar det inte för john@härnösand.nu? Eller för att förtydliga: Varför fungear inte det exemplet? :)

mrblondeMedlem sedan aug. 20012 349 inlägg
#8

Onödigt vetande, men på Larry Ostermans blog diskuterades för ett tag sedan epostvalidering med regexp. De kom fram till att det är i stort sett omöjligt att lösa med regexp om man skll validera enligt RFC:n.

http://blogs.msdn.com/larryosterman/archive/2005/01/07/348548.aspx
Och här fortsätter diskussionen dagen efter om samma ämne.
http://blogs.msdn.com/larryosterman/archive/2005/01/10/350135.aspx

Larry Osterman är alltid intressant!

jeliassonMedlem sedan sep. 200522 inlägg
#9

En riktig email verifierare skulle även verifiera så att TLD är korrekt.
Vad jag vet så är inte TLDn .xxx korrekt.

HansenMedlem sedan aug. 2000374 inlägg
#10

jeliasson skrev:

En riktig email verifierare skulle även verifiera så att TLD är korrekt..

Exemplet ovan verifierar MX pekaren.

jeliasson skrev:

Vad jag vet så är inte TLDn .xxx korrekt.

ICANN har godkänt .xxx, så det är bara en tidsfråga innan det tas i drift.

http://www.icann.org/announcements/announcement-01jun05.htm
http://www.icmregistry.com/ICMPressRelease.html

ICANN tillhandahåller en lista på giltiga TLD's, http://data.iana.org/TLD/tlds-alpha-by-domain.txt

Ett regexp för att validera nuvarande TLD's:

(?:a(?:e(?:ro)?|r(?:pa)?|[cdfgilmnoqstuwz])|b(?:iz?|[abdefghjmnorstvwyz])|c(?:o(
?:m|op)?|[acdfghiklmnruvxyz])|d[ejkmoz]|e(?:[cegrst]|d?u)|f[ijkmor]|g(?:[abdefgh
ilmnpqrstuwy]|ov)|h[kmnrtu]|i(?:n(?:fo|t)?|[delmoqrst])|j(?:o(?:bs)?|[emp])|k[eg
himnrwyz]|l[abcikrstuvy]|m(?:u(?:seum)?|[acdghkmnopqrstvwxyz]|i?l)|n(?:a(?:me)?|
et?|[cfgilopruz])|o(?:m|rg)|p(?:ro?|[aefghklmnstwy])|r[eouw]|s[abcdeghijklmnortu
vyz]|t(?:r(?:avel)?|[cdfghjklmnoptvwz])|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw
]|qa)
136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)