Utiliser une fonction ..

Ncdetoulouse
Invité n'ayant pas de compte PHPfrance

23 mai 2007, 10:51

Hello à tous !

J'ai le script de la fonction suivante ci-dessous, et je ne parviens pas à l'utiliser ..
Bien utilisée, elle doit donner le meme résultat que sur http://www.tienhuis.nl/php-email-addres ... ify-probe/
Merci à celui qui arrivera à m'aider ..

Excellente semaine à tous en tout cas :-)

<?  
  
highlight_file(__FILE__);  
  
function validateEmail($email, $domainCheck = false, $verify = false, $return_errors=false) {  
    global $debug;  
    if($debug) {echo "<pre>";}  
    $errors = array();  
    # Check syntax with regex  
    if (preg_match('/^([a-zA-Z0-9\._\+-]+)\@((\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,7}|[0-9]{1,3})(\]?))$/', $email, $matches)) {  
        $user = $matches[1];  
        $domain = $matches[2];  
        # Check availability of DNS MX records  
        if ($domainCheck && function_exists('checkdnsrr')) {  
            # Construct array of available mailservers  
            if(getmxrr($domain, $mxhosts, $mxweight)) {  
                for($i=0;$i<count($mxhosts);$i++){  
                    $mxs[$mxhosts[$i]] = $mxweight[$i];  
                }  
                asort($mxs);  
                $mailers = array_keys($mxs);  
            } elseif(checkdnsrr($domain, 'A')) {  
                $mailers[0] = gethostbyname($domain);  
            } else {  
                $mailers=array();  
            }  
            $total = count($mailers);  
            # Query each mailserver  
            if($total > 0 && $verify) {  
                # Check if mailers accept mail  
                for($n=0; $n < $total; $n++) {  
                    # Check if socket can be opened  
                    if($debug) { echo "Checking server $mailers[$n]...\n";}  
                    $connect_timeout = 2;  
                    $errno = 0;  
                    $errstr = 0;  
                    $probe_address = '[email protected]';  
                    # Try to open up socket  
                    if($sock = @fsockopen($mailers[$n], 25, $errno , $errstr, $connect_timeout)) {  
                        $response = fgets($sock);  
                        if($debug) {echo "Opening up socket to $mailers[$n]... Succes!\n";}  
                        stream_set_timeout($sock, 5);  
                        $meta = stream_get_meta_data($sock);  
                        if($debug) { echo "$mailers[$n] replied: $response\n";}  
                        $cmds = array(  
                            "HELO outkast.tienhuis.nl",  # Be sure to set this correctly!  
                            "MAIL FROM: <$probe_address>",  
                            "RCPT TO: <$email>",  
                            "QUIT",  
                        );  
                        # Hard error on connect -> break out  
                        if(!$meta['timed_out'] && !preg_match('/^2\d\d[ -]/', $response)) {  
                            $error = "Error: $mailers[$n] said: $response\n";  
                            break;  
                        }  
                        foreach($cmds as $cmd) {  
                            $before = microtime(true);  
                            fputs($sock, "$cmd\r\n" );  
                            $response = fgets($sock, 4096);  
                            $t = 1000*(microtime(true)-$before);  
                            if($debug) {echo htmlentities("$cmd\n$response" ) . "(" . sprintf('%.2f', $t) . " ms)\n";}  
                            if(!$meta['timed_out'] && preg_match('/^5\d\d[ -]/', $response)) {  
                                $error = "Unverified address: $mailers[$n] said: $response";  
                                break 2;  
                            }  
                        }  
                        fclose($sock);  
                        if($debug) { echo "Succesful communication with $mailers[$n], no hard errors, assuming OK";}  
                        break;  
                    } elseif($n == $total-1) {  
                        $errors = "None of the mailservers listed for $domain could be contacted";  
                    }  
                }  
            } else {  
                $error = "No usable DNS records found for domain '$domain'";  
            }  
        }  
    } else {  
        $error = 'Address syntax not correct';  
    }  
    if($debug) { echo "</pre>";}  
    #echo "</pre>";  
    if($return_errors) {  
        # Give back details about the error(s).  
        # Return FALSE if there are no errors.  
        # Keep this in mind when using it like:  
        # if(checkEmail($addr)) {  
        # Because of this strange behaviour this  
        # is not default ;-)  
        if(isset($error)) return htmlentities($error); else return false;  
    } else {  
        # 'Old' behaviour, simple to understand  
        if(isset($error)) return false; else return true;  
    }  
}  
  
  
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2007, 11:51

Et qu'est ce qui ne fonctionne pas ? comment l'appelles-tu ? quelles valeurs est-ce que tu lui passes ? quel est le résultat obtenu ? quel est le résultat attendu ?
- quelle différence y a-t-il entre ces deux résultats ?
- dans quelles structures rentre-t-il pour obtenir l'un plutot que l'autre ?
- Que contiennent les valeurs qui déterminent dans quelle structure il va rentrer ?

En principe si tu arrives à répondre à toutes ces questions, tu sauras ce qui ne va pas et ton code sera débuggé ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...