IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Vérifier validité adresse e-mail avec SMTP


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Vérifier validité adresse e-mail avec SMTP
    Bonjour,

    Je teste ce script pour tester la validité d'adresses emails ; j'en ai besoin pour un site qui souhaite vérifier en direct si les adresses sont bien valides.
    Avec les emails orange, gmail ou bien encore sfr (neuf, cegetel, etc.) cela fonctionne très bien mais avec les adresses laposte.net et aol.fr, cela ne fonctionne pas.

    Savez-vous d'où cela peut provenir SVP ? Pour info, certains services sur le Web y parviennent, comme http://mailtester.com.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    function smtp_validate($email)
    {
        $result = false;
        list($name, $domain) = explode('@', $email);
        $max_conn_time = 30;
        $sock = '';
        $port = 25;
        $max_read_time = 5;
        $users = $name;
        $hosts = array();
        $mxweights = array();
        getmxrr($domain, $hosts, $mxweights);
        $mxs = array_combine($hosts, $mxweights);
        asort($mxs, SORT_NUMERIC);
        $mxs[$domain] = 100;
        $timeout = $max_conn_time / count($mxs);
        while (list($host) = each($mxs))
        {
            if ($sock = fsockopen($host, $port, $errno, $errstr, (float)$timeout))
            {
                stream_set_timeout($sock, $max_read_time);
                break;
            }
        }
     
        if ($sock)
        {
            $reply = fread($sock, 2082);
            preg_match('/^([0-9]{3}) /ims', $reply, $matches);
            $code = isset($matches[1]) ? $matches[1] : '';
            $msg = "HELO " . $domain;
            fwrite($sock, $msg . "\r\n");
            $reply = fread($sock, 2082);
            $msg = "MAIL FROM: <" . $name . '@' . $domain . ">";
            fwrite($sock, $msg . "\r\n");
            $reply = fread($sock, 2082);
            $msg = "RCPT TO: <" . $name . '@' . $domain . ">";
            fwrite($sock, $msg . "\r\n");
            $reply = fread($sock, 2082);
            preg_match('/^([0-9]{3}) /ims', $reply, $matches);
            $code = isset($matches[1]) ? $matches[1] : '';
            if ($code == '250')
            {
                $result = true;
            }
            elseif ($code == '451' || $code == '452')
            {
                $result = true;
            }
            else
            {
                $result = false;
            }
     
            $msg = "quit";
            fwrite($sock, $msg . "\r\n");
            fclose($sock);
        }
     
        return $result;
    }
    smtp_validate($email);

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Ton script extrait le domaine d'une adresse mail, récupère le MX de ce domaine et essaye de se connecter au serveur smtp.

    Ca peut servir à tester une adresse mais c'est loin d'être fiable.

    Pour tester la validité d'une adresse mail, la méthode universelle c'est d'envoyer un mail à cette adresse et de demander à l'utilisateur de cliquer sur un lien (le fameux mail d'activation qu'on reçoit à chaque inscription).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Oui merci je connais bien le double opt-in mais pour les besoins de ce projet j'ai besoin de vérifier que les adresses e-mail qui sont enregistrées en base de données sont toujours valides, à différents moments de l'année.

    Si quelques services comme celui que j'ai indiqué (http://mailtester.com/) y parviennent, cela doit être possible, même sans atteindre une fiabilité à 100%.

    Merci d'avance si quelqu'un a une solution.

Discussions similaires

  1. [c#, vs2005, WinForms]Vérifier validité adresse mail
    Par Filippo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/06/2007, 09h10
  2. [phpBB] Envoi d'e-mails avec SMTP
    Par gnaoui_9999 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/03/2007, 23h58
  3. Réponses: 1
    Dernier message: 05/04/2006, 23h22
  4. [C#] Problème d'envoi de mail avec SMTP local
    Par bossun dans le forum ASP.NET
    Réponses: 10
    Dernier message: 27/02/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo