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

Langage PHP Discussion :

Tester existence mail via socket


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut Tester existence mail via socket
    Bonjour,

    Pour tester l'existence d'une adresse email (pour éviter des inscriptions complètement bidon sur mon site), j'ai trouvé le script suivant, mais il plante et je ne trouve pas la provenance de l'erreur.

    Je tourne en local sous Windows XP.

    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
    64
    65
    function mailTester($mail)
     {
      if(preg_match("#^(.*)@(.*\.[a-z]{2,4})$#i", $mail, $ret))
       {
        $r = 0;
     
        $socket = socket_create(AF_INET, SOCK_STREAM, 0);
        getmxrr($ret[2], $r);
     
        if(count($r) == 0)
         {//try to connect directly to the server
          @fsockopen($ret[2],"25",$er1,$er2,0.5); //can't use it with socket :s
     
          if($er1>0)
           return -3;//no mx server and no smtp server
     
          $r[0]=$ret[2];
         }
     
        if(!socket_connect($socket,$r[0],"25"))
         return -2;//can't connect
     
        socket_recv($socket, $retour, 1024, 0);
        $ret = getCodeMsg($retour);
     
        if($ret[0] != 220)
         return -4;
     
        socket_write($socket, "EHLO voo.be\n");
        socket_recv($socket, $retour,1024,0);
     
        $ret=getCodeMsg($retour);
     
        if($ret[0] != 250)
         return -7;
     
        socket_write($socket, "MAIL FROM: <mon_adresse@voo.be>\n");
        socket_recv($socket, $retour, 1024, 0);
        $ret=getCodeMsg($retour);
     
        if($ret[0]!=250)
         return -5;
     
        socket_write($socket, "RCPT TO: <".$mail.">\n");
        socket_recv($socket, $retour, 1024, 0);
        socket_write($socket, "quit\n");
        $ret = getCodeMsg($retour);
        socket_close($socket);
     
        if($ret[0]==250)
         return 1;
        else
         return -6;
       }
     
      return -1;//not an adress mail
     }
     
    function getCodeMsg($ret)
     {
      preg_match("#^([0-9]+) (.*)$#im", $ret, $tab);
      array_shift($tab);
     
      return $tab;
     }
    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Apparemment, mais sans en être certain, j'aurais déjà un problème à ce niveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $socket = socket_create(AF_INET, SOCK_STREAM, 0);

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Autant pour moi, je n'avais pas activé l'extension php_sockets.

    Cependant, maintenant, j'ai la valeur de retour '-2', ce qui signifie que la connexion au socket ne peut se faire.

    D'ailleurs, lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!socket_connect($socket, $r[0], "25"))
         {echo socket_strerror(socket_last_error($socket)); return -2;//can't connect
         }
    j'obtiens le message :

    "Une tentative de connexion a �chou� car le parti connect� n'a pas r�pondu convenablement au-del� d'une certaine dur�e ou une connexion �tablie a �chou� car l'h�te de connexion n'a pas r�pondu."

  4. #4
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Tous les serveurs ne répondent pas, d'ailleurs c'est le cas pour plus de 80% des serveurs.
    Vérifier l'existence réelle d'une adresse email ne se fait pas aussi facilement et est souvent une perte de temps.

    Pour ma part je préfères une table temporaire, avec purge quotidienne, avec l'envoi d'un email contenant un lien permettant de valider les informations temporaires et les rendre persistantes.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Bonjour et merci beaucoup pour ta réponse.

    De fait, s'il ne s'agissait que de la création de faux comptes, je ne traiterais cela que via des purges périodiques. Cependant, vu que c'est un site dépôt d'annonces payantes, afin de ne pas perturber l'annonceur dans sa démarche de déposer une annonce, directement après la création de son compte (temporaire qui devra être confirmé par la suite via un lien dans un email), je l'amène directement sur le module de dépôt d'une annonce. Donc, si je laisse cours à la création de faux compte, je laisse également cours à de fausses annonces, voir plus... ce qui m'ennuie plus. Ce pourquoi je désirais pouvoir vérifier l'existence de l'adresse de messagerie.

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Dans tous les cas c'est impossible suivant le fournisseur de l'email pour la simple et bonne raison que la seule façon sûre d'obtenir cette information est d’interroger le serveur et que la majorité ne répondent pas.

Discussions similaires

  1. [WS 2003] Tester une adresse mail via telnet et smtp
    Par dede92 dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 17/03/2014, 08h14
  2. Créer un mail via une appli
    Par Cedced dans le forum C++
    Réponses: 5
    Dernier message: 11/10/2005, 11h52
  3. Réponses: 4
    Dernier message: 08/09/2005, 22h24
  4. Tester existence d'une contrainte
    Par castaka dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/07/2005, 17h47
  5. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30

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