/ Forside/ Teknologi / Udvikling / PHP / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Check mail adresse
Fra : funbreak
Vist : 1218 gange
340 point
Dato : 15-11-04 11:52

Er der nogle som har et php script til at checke en email adr. om den findes og er gyldig?


 
 
Kommentar
Fra : memuel


Dato : 15-11-04 16:32

Du kan jo bare sende en mail, hvis adressen er ugyldig, får du en mail tilbage om at mailen ikke kunne leveres
Memuel

Kommentar
Fra : poul_from


Dato : 15-11-04 22:12

her har du en funktion i et script
der validere mailadressen om den er korrekt og om den rent faktisk eksistere
udførlig beskrivelse kan du finde her
http://www.zend.com/zend/spotlight/ev12apr.php

<?php
function ValidateMail($Email) {
global $HTTP_HOST;
$result = array();
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Email)) {

$result[0]=false;
$result[1]="$Email is not properly formatted";
return $result;
}
list ( $Username, $Domain ) = split ("@",$Email);

if (getmxrr($Domain, $MXHost)) {

$ConnectAddress = $MXHost[0];
} else {

$ConnectAddress = $Domain;

}
$Connect = fsockopen ( $ConnectAddress, 25 );

if ($Connect) {

if (ereg("^220", $Out = fgets($Connect, 1024))) {

fputs ($Connect, "HELO $HTTP_HOST\r\n");
$Out = fgets ( $Connect, 1024 );
fputs ($Connect, "MAIL FROM: <{$Email}>\r\n");
$From = fgets ( $Connect, 1024 );
fputs ($Connect, "RCPT TO: <{$Email}>\r\n");
$To = fgets ($Connect, 1024);
fputs ($Connect, "QUIT\r\n");
fclose($Connect);
if (!ereg ("^250", $From) ||
!ereg ( "^250", $To )) {
$result[0]=false;
$result[1]="Server rejected address";
return $result;

}
} else {

$result[0] = false;
$result[1] = "No response from server";
return $result;
}

} else {

$result[0]=false;
$result[1]="Can not connect E-Mail server.";
return $result;
}
$result[0]=true;
$result[1]="$Email appears to be valid.";
return $result;
} // end of function
?>

Kommentar
Fra : poul_from


Dato : 15-11-04 23:59

her lidt om hvordan du anvender en funktion
i bunden af det ovennævnte script (efter denne sætning " } // end of function ")
kan du tilføje
$post=$http_get_vars["tjek"];// henter tjek=bruger@domæne.dk
$row=ValidateMail($post);// kører funktionen
echo $row[1];// udskriver resultatet fra funktionen

gem scriptet som validatemail.php

for at afprøve dette script skal du i browsers adresseline skrive sådan
http://www.ditdomæne.dk/validatemail.php?tjek=bruger@domæne.dk

du kan afprøve det på dette link
http://www.p-nissen.dk/validatemail.php?tjek=bruger@domæne.dk
du kan prøve med andre mailadresser


Accepteret svar
Fra : rfh

Modtaget 340 point
Dato : 17-11-04 07:01

Der er også et her du kan prøve

Kode
<html>
<head>
<title>Listing 24-8</title>
</head>
<body>
<?php
   /*
   ** Function: verifyEmail
   ** Input: STRING address, REFERENCE error
   ** Output: BOOLEAN
   ** Description: Attempts to verify an email address by
   ** contacting a mail exchanger. Registered mail
   ** exchangers are requested from the domain controller first,
   ** then the exact domain itself. The error argument will
   ** contain relevant text if the address could not be
   ** verified.
   */
   function verifyEmail($address, &$error)
   {
      $mxhost = array();
      $mxweight = array();
      list($user, $domain) = split("@", $address, 2);

      //make sure the domain has a mail exchanger
      if(dns_check_record($domain, "MX"))
      {
         //get mail exchanger records
         if(!dns_get_mx($domain, $mxhost, $mxweight))
         {
            $error = "Could not retrieve mail exchangers!<br>\n";
            return(FALSE);
         }
      }
      else
      {
         //if no mail exchanger, maybe the host itself
         //will accept mail
         $mxhost[] = $domain;
         $mxweight[] = 1;
      }

      //create sorted array of hosts
      $weighted_host = array();
      for($i = 0; $i < count($mxhost); $i++)
      {
         $weighted_host[($mxweight[$i])] = $mxhost[$i];
      }
      ksort($weighted_host);

      //loop over each host
      foreach($weighted_host as $host)
      {
         //connect to host on SMTP port
         if(!($fp = fsockopen($host, 25)))
         {
            //couldn't connect to this host, but
            //the next might work
            continue;
         }

         /*
         ** skip over "220" messages
         ** give up if no response for 10 seconds
         */
         stream_set_blocking($fp, FALSE);
         $stopTime = time() + 10;
         $gotResponse = FALSE;
         while(TRUE)
         {
            //try to get a line from mail server
            $line = fgets($fp, 1024);
            if(substr($line, 0, 3) == "220")
            {
               //reset timer
               $stopTime = time() + 10;
               $gotResponse = TRUE;
            }
            elseif(($line == "") AND ($gotResponse))
            {
               break;
            }
            elseif(time() > $stopTime)
            {
               break;
            }
         }

         if(!$gotResponse)
         {
            //this host was unresponsive, but
            //maybe the next will be better
            continue;
         }
   
         stream_set_blocking($fp, TRUE);
   
         //sign in
         fputs($fp, "HELO {$_SERVER['SERVER_NAME']}\r\n");
         fgets($fp, 1024);
   
         //set from
         fputs($fp, "MAIL FROM: " .
            "<httpd@{$_SERVER['SERVER_NAME']}>\r\n");
            fgets($fp, 1024);
   
         //try address
         fputs($fp, "RCPT TO: <$address>\r\n");
         $line = fgets($fp, 1024);
   
         //close connection
         fputs($fp, "QUIT\r\n");
         fclose($fp);
         if(substr($line, 0, 3) != "250")
         {
            //mail server doesn't recognize
            //this address, so it must be bad
            $error = $line;
            return(FALSE);
         }
         else
         {
            //address recognized
            return(TRUE);
         }
      }

      $error = "Unable to reach a mail exchanger!";
      return(FALSE);
   }

   if(verifyEmail("you@youdomain.com", $error))
   {
      print("Verified!<br>\n");
   }
   else
   {
      print("Could not verify!<br>\n");
      print("Error: $error<br>\n");
   }
?>
</body>
</html>


Kommentar
Fra : funbreak


Dato : 21-11-04 22:09

Tak for alle indlæg, jeg har prøvet begge scripts.

Valgte at bruge forslaget fra rfh, der var en bedre beskrivelse i scriptet hele vejen igennem.

Bonus for veludførte formatering af script (Det ser man ikke så meget til på kandu).

:-funbreak:-

Godkendelse af svar
Fra : funbreak


Dato : 21-11-04 22:09

Tak for svaret rfh.
                        

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177420
Tips : 31962
Nyheder : 719565
Indlæg : 6407880
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste