verificare se un indirizzo email esiste davvero

esiste in php il sistema per verificare se un indirizzo email esiste davvero?

inviato 10 anni fa
blackeyes
X 0 X

no, e non esiste da nessuna parte altrimenti per gli spammer sarebbe troppo semplice scoprire nuovi indirizzi email da bombardare...

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

L'unico metodo utilizzabile, ma è indipendente da php, è quello di inviare una mail ed aspettare la risposta.

Alcune mailing list verificano l'esistenza di postmaster@dominio delle email@dominio inserite prima di aggiungerle effettivamente alla lista, ma come lo facciano non lo so.

risposto 10 anni fa
LonelyWolf
X 0 X

è possibile connettersi al server che gestisce la casella di posta e interrrogarlo circa l'esistenza dell'indirizzo. Però non tutti i server rispondono correttamente, proprio per evitare che uno spammer possa individuare indirizzi email validi, creati a caso.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Puoi sempre vedere se il recordo MX (mail exchange) punta a qualcosa, ma è una procedura complessa, dato che devi praticamente fare un whois sulla rete.

Mi pare che in PHP c'è qualcosa del genere:

getmxrr

(PHP 3, PHP 4, PHP 5)

getmxrr --  Ottiene i record MX corrispondenti a un dato nome di host Internet

Descrizione

int getmxrr ( string hostname, array mxhosts [, array weight] )

Cerca nel DNS i record MX corrispondenti a hostname. Restituisce TRUE se ne vengono trovati. Restituisce FALSE se non ne vengono trovati o se avviene un errore.

La lista di record MX trovati viene messa nell'array mxhosts. Se viene indicato l'array weight, esso viene riempito con le informazioni ottenute sui vari pesi.

Vedere anche checkdnsrr(), gethostbyname(), gethostbynamel(), gethostbyaddr()e la pagina man named(8).

comincia a guardare sul manuale, ma non è una cosa semplice.

risposto 10 anni fa
Marco Grazia
X 0 X

Ad esempio sul manuale online ho trovato questo:

This script validates an e-mail adress using getmxrr and fsockopen

1. it validates the syntax of the address.

2. get MX records by hostname

3. connect mail server and verify mailbox(using smtp command RCTP TO:<email>)

When the function "validate_email([email])" fails connecting the mail server with the highest priority in the MX record it will continue with the second mail server and so on..

The function "validate_email([email])" returns 0 when it failes one the 3 steps above, it will return 1 otherwise

Grtz Lennart Poot

<?

function validate_email($email){

   $mailparts=explode("@",$email);

   $hostname = $mailparts[1];

   // validate email address syntax

   $exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";

   $b_valid_syntax=eregi($exp, $email);

   // get mx addresses by getmxrr

   $b_mx_avail=getmxrr( $hostname, $mx_records, $mx_weight );

   $b_server_found=0;

   if($b_valid_syntax && $b_mx_avail){

     // copy mx records and weight into array $mxs

     $mxs=array();

     for($i=0;$i<count($mx_records);$i++){

       $mxs[$mx_weight[$i]]=$mx_records[$i];

     }

     // sort array mxs to get servers with highest prio

     ksort ($mxs, SORT_NUMERIC );

     reset ($mxs);

     while (list ($mx_weight, $mx_host) = each ($mxs) ) {

       if($b_server_found == 0){

         //try connection on port 25

         $fp = @fsockopen($mx_host,25, $errno, $errstr, 2);

         if($fp){

           $ms_resp="";

           // say HELO to mailserver

           $ms_resp.=send_command($fp, "HELO microsoft.com");

           // initialize sending mail

           $ms_resp.=send_command($fp, "MAIL FROM:<support@microsoft.com>");

           // try receipent address, will return 250 when ok..

           $rcpt_text=send_command($fp, "RCPT TO:<".$email.">");

           $ms_resp.=$rcpt_text;

           if(substr( $rcpt_text, 0, 3) == "250")

             $b_server_found=1;

           // quit mail server connection

           $ms_resp.=send_command($fp, "QUIT");

         fclose($fp);

         }

       }

   }

  }

  return $b_server_found;

}

function send_command($fp, $out){

  fwrite($fp, $out . "\r\n");

  return get_data($fp);

}

function get_data($fp){

  $s="";

  stream_set_timeout($fp, 2);

  for($i=0;$i<2;$i++)

   $s.=fgets($fp, 1024);

  return $s;

}

// support windows platforms

if (!function_exists ('getmxrr') ) {

  function getmxrr($hostname, &$mxhosts, &$mxweight) {

   if (!is_array ($mxhosts) ) {

     $mxhosts = array ();

   }

   if (!empty ($hostname) ) {

     $output = "";

     @exec ("nslookup.exe -type=MX $hostname.", $output);

     $imx=-1;

     foreach ($output as $line) {

       $imx++;

       $parts = "";

       if (preg_match ("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.*)$/", $line, $parts) ) {

         $mxweight[$imx] = $parts[1];

         $mxhosts[$imx] = $parts[2];

       }

     }

     return ($imx!=-1);

   }

   return false;

  }

}

?>

risposto 10 anni fa
Marco Grazia
X 0 X

in effetti non  è una cosa semplice cmq grazie

risposto 10 anni fa
blackeyes
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda