Jag kommer bygga ett system där kunden vill med vissa intervaller kolla så e-postadresserna är i bruk. Jag är medveten att bara pinga en gång inte behöver betyda att e-postadressen är borta.
Jag undrar om någon har ett sådant skript i asp eller om det finns någon komponent till det.
Vet inte om jag har rätt...men pinga en emailadress?...går det? Pingar man inte bara en dator för att se om den är igång osv...pinga en specifik e-adress skulle ju bara leda till att commandot misslyckas eller att servern som har e-adressen är igång...inte att e-adressen finns...har jag rätt eller är jag ute och cyklar i norge...igen?
Jag vet att det går att kolla det med ett kommersielt program som jag inte kommer ihåg vad det heter...men iallafall så är det programet även en plugin så det går att koppla till ASP sidor...kommer inte ihåg mer än att när jag testa det så kunde den svara rätt på de addresser jag testa med...(alltså om dom var i bruk eller inte...)
Det där kan ju knappast ge så mycket eftersom de, som sagt, bara kollar om domännamnet är kopplat till en epostadress.
Den säger ju inget om det verkligen finns någon med adressen: test@webforum.nu bara att *whatever*@webforum.nu finns.
Det är relativt vanligt att man konfigurerar bort möjligheten att verifiera epostadresser mot SMTP-servern för att skydda sig mot spammare som brute-forcetestar sig fram till en massa korrekta adresser, de SMTP-servrar jag använder svarar t.ex bara "send some mail, i'll try my best" på VRFY-kommandot.
Slutsats, det är värdelöst att försöka verifiera adresser på detta sätt, det enda som funkar är att skicka ett mail och kräva ett svar från personen som äger adressen. Allt annat är slöseri med tid.
Jo, naturligtvis används SMTP, men inte VRFY-kommandot. Det som görs är det som skrivs ut i webbläsaren från scriptet, inget annat, och så kollar jag vilken "felkod" som SMTP-servern skickar tillbaka. Hurvida det fungerar "bättre" än VRFY vet jag inte, men det verkar vara så de "riktiga" programmen gör.
Men som sgtpepper skriver, det finns naturligtvis inget som säger att det är en emailadress som används, det kan ju vara tex en gammal spray-adress som ingen kommer ihåg lösenordet till, och det är ju inte så intressant och skicka mail (läs: SPAM, för det är i sådana sammanhang dessa script används har jag förstått ;) ) till en sådan.
/nicclas
PS Ni som ville ha koden, den kommer så småningom :) DS
Jag tackar för alla bra inlägg i denna frågan, jag är medveten om problemet att vissa e-postadresser endast är "fiktiva" men man måste se datorn som ett hjälpmedel i arbetet och inget krav.
Om en e-post raderas så upptäcker systemet det, min kund kan kontakta källan och på så sätt snabba upp arbetet lite.
Jag kan ju lika gärna posta koden här. Nedan är sidan/koden som kör på https://www.nic-sys.se/epost.php?epost=c@cr.st just nu. Funkar inte perfekt, pga timeouts etc., men det är ju upp till var och en om man vill prova att använda :)
<?
// isValid() - Check for validity of an email address
// using Reg Exp. MX-record lookup and SMTP
// request.
//
// () nicclas - [url]www.frisim.com[/url] / [url]www.nic-sys.se[/url]
//
// Inspired by earlier attempts for email-validation.
// Not very reliable but worth a try ;)
function isValid($email){
global $HTTP_HOST;
$status="email ok";
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,5})$", $email)){
$status="Adressen $Email ej korrekt enligt Reg Exp test.<br>";
return $status;
}
list($name,$domain)=split("@",$email);
if(checkdnsrr($domain, "MX")){
getmxrr ($domain, $mxlist);
}
else {
// MX-record is missing, try A-record for domain
$mxlist[0]=$domain;
}
$try=0;
$verified=0;
echo "Domäner att prova: ".count($mxlist)."<br>\n";
while(($try<count($mxlist)) && $verified==0){
$sp=fsockopen($mxlist[$try],25);
echo "Try $try - Trying: ".$mxlist[$try]."\n";
$try++;
if ($sp){
if(ereg("^220",$reply=fgets($sp,1024))){
echo "Sänder: HELO $HTTP_HOST<br>";
fputs($sp, "HELO $HTTP_HOST\r\n" );
$reply=fgets($sp, 1024 );
echo "Sänder: MAIL FROM: <{$email}><br>";
fputs($sp, "MAIL FROM: <{$email}>\r\n" );
$from=fgets($sp, 1024 );
echo "Sänder: RCPT TO: <{$email}><br>";
fputs($sp, "RCPT TO: <{$email}>\r\n" );
$to=fgets($sp, 1024 );
echo "Sänder: QUIT<br>";
fputs($sp, "QUIT\r\n");
fclose($sp);
if(!ereg("^250", $from)|| !ereg("^250", $to )) {
$status="Servern svarar inte på $email.";
} else {
$status="email ok";
$verified=1;
}
}
}
}
return $status;
}
$ret=isValid($epost);
echo $ret;
?>
Oftast på en domän finns det minst 2st mailservrar, där en handhar alla konton och den andra tar imot mail adresserad till domänen oavsett om mailadressen finns eller inte i backupsyfte om den "riktiga" mailserver går ner.
Jag provade mot en mailadress som jag vet inte finns och fick som svar att den var helt Ok, pga att skriptet "pratade" med backupmailservern.
Många företag sitter bakom en brandvägg, där brandväggen (som agrerar mailserver) endast kontrollerar om den tar imot för domänen, sedan skickas mailet vidare in till mailserver. I detta fallet får man Ok av brandväggen iom. att domänen finns, detta betyder dock inte att mailadressen fungerar.
Bägge dessa fallen gäller all kontroll av mailadresser!