Fonction mail

Bonjour
Après avoir enregistrer les membres il recoivent un mail pour activer leurs comptes.
J'ai une erreur mais je n'arrive pas à comprendre, mon fichier PHP.ini a l'air d'être bien configurer.
Par contre l'INSERT du membre ça se passe bien.
Pouvez-vous s'ils vous plait regarder voir ce qui ne va pas.
Je suis en local, sous wamp windows7.
l'erreur retournée
Warning: mail() [function.mail]: SMTP server response: 503 5.5.0 need RCPT before DATA in C

Je vous remercie beaucoup
Mon fichier PHP.ini
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = smtp.orange.fr
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = monsite@orange.fr

Le script de vérification
$PARAM = array
 (
  'ID_ADHERENT'  => isset($_REQUEST['id_adherent']) ? $_REQUEST['id_adherent'] : '',
  'NOM'    => isset($_POST['nom']) ? Security::clean(strtoupper($_POST['nom'])) : '',
  'PRENOM'   => isset($_POST['prenom']) ? Security::clean(ucfirst($_POST['prenom'])) : '',
  'EMAIL'    => isset($_POST['email']) ? Security::clean($_POST['email']) : '',  
  'NAISSANCE'   => isset($_POST['naissance_3']) ? Security::clean($_POST['naissance_3']) . '-' .  Security::clean($_POST['naissance_2']) . '-' .  Security::clean($_POST['naissance_1']) : '',
  'FIXE'    => isset($_POST['fixe']) ? $_POST['fixe'] : '',
  'MOBILE'   => isset($_POST['mobile']) ? $_POST['mobile'] : '',
  'ADRESSE'    => isset($_POST['adresse']) ? Security::clean(ucfirst($_POST['adresse'])) : '',
  'LIEU_DIT'   => isset($_POST['lieu_dit']) ? Security::clean(ucfirst($_POST['lieu_dit'])) : '',
  'CODE_POSTAL'   => isset($_POST['code_postal']) ? $_POST['code_postal'] : '',
  'VILLE'    => isset($_POST['ville']) ? Security::clean(strtoupper($_POST['ville'])) : '',
  'PSEUDO'   => isset($_POST['pseudo']) ? Security::clean(strtolower($_POST['pseudo'])) : '',
  'PASSWORD'   => isset($_POST['password']) ? Security::clean($_POST['password']) : '',
  'ACTIF'    => isset($_POST['actif']) ? Security::clean(strtolower($_POST['actif'])) : '',
  'DEBUT'    => isset($_POST['debut']) ? Security::clean(strtolower($_POST['debut'])) : '',
  'FIN'    => isset($_POST['fin']) ? Security::clean(strtolower($_POST['fin'])) : '',
  'TOKEN'    => isset($_POST['token']) ? Security::clean($_POST['token']) : ''
 );

if (isset($_REQUEST['action']) AND !empty($_REQUEST['action'])) {

 switch($_REQUEST['action']) {

  case 'ajouter':

  //on sélectionne la table utilisateur et on cherche toutes les personnes portant le même nom et prénom et qui est membre actif
  $resultats = $bdd->query("SELECT * FROM tb_adherent 
   WHERE nom = '". $PARAM['NOM'] ."' 
   AND prenom = '". $PARAM['PRENOM'] ."'
   AND actif = '1'");
  //on recupére le resultat de la requète dans un tableau $donnees
  $donnees = $resultats->fetch();
  //si le nom est vide on insert...
  if (empty ($donnees['nom'])) {

   $verif = $bdd->prepare("SELECT pseudo FROM tb_adherent WHERE pseudo = :pseudo AND actif = '1'");
   $verif->execute(array('pseudo' => $_POST['pseudo']));
   $count = $verif->rowCount();
   if ($count > 0) {
    $errors[] = 'Ce Pseudo est déjà utilisé, veuillez en choisir un autre...<br/>';
    echo output_errors($errors);
   } else {

   $sql = 'INSERT INTO tb_adherent
      (nom,
      prenom,
      email,
      naissance,
      fixe,
      mobile,
      adresse,
      lieu_dit,
      code_postal,
      ville,
      pseudo,
      password,
      actif,
      debut,
      fin,
      token)
     VALUES
      (:nom,
      :prenom,
      :email,
      :naissance,
      :fixe,
      :mobile,
      :adresse,
      :lieu_dit,
      :code_postal,
      :ville,
      :pseudo,
      :password,
      :actif,
      :debut,
      :fin,
      :token)';
   $requete = $bdd->prepare($sql);
   $requete->bindParam(':nom',     $PARAM['NOM']);
   $requete->bindParam(':prenom',    $PARAM['PRENOM']);
   $requete->bindParam(':email',   $PARAM['EMAIL']);
   $requete->bindParam(':naissance',   $PARAM['NAISSANCE']);
   $requete->bindParam(':fixe',    $PARAM['FIXE']);
   $requete->bindParam(':mobile',    $PARAM['MOBILE']);
   $requete->bindParam(':adresse',    $PARAM['ADRESSE']);
   $requete->bindParam(':lieu_dit',   $PARAM['LIEU_DIT']);
   $requete->bindParam(':code_postal',   $PARAM['CODE_POSTAL']);
   $requete->bindParam(':ville',    $PARAM['VILLE']);   
   $requete->bindParam(':pseudo',   $PARAM['PSEUDO']);
   $requete->bindParam(':password',   Security::hash($PARAM['PASSWORD']));
   $requete->bindParam(':actif',   $PARAM['ACTIF']); 
   $requete->bindParam(':debut',   $PARAM['DEBUT']);
   $requete->bindParam(':fin',    $PARAM['FIN']);
   $requete->bindParam(':token',   $PARAM['TOKEN']);
   $requete->execute();

   $to = $PARAM['EMAIL'];
   $sujet = 'Activation de votre compte';
   $body = 'Bonjour, veuillez activer votre compte en cliquand ici -> <a href="http//localhost/monsite/activate.php?token'.$PARAM['TOKEN'].'&email'.$to.'">Activation du compte</a>';
   $entete = "MIME=Version: 1.0\r\n";
   $entete .= "Content-type: text/html; charset=UTF-8\r\n";
   $entete .= 'From: monsite.fr' . "\r\n" . 'Reply-To: papyclic@orange.fr' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
 
   mail($to, $sujet, $body, $entete);

   $errors[] = 'Bravo, le membre a bien été enregistré';
   echo output_errors($errors);   
   }

  } else {   
   $errors[] = "Ce membre existe déjà....<br/>";
   echo output_errors($errors);    
   }

   break;  
 }
}

2 réponses

  1. Bonjour,
    ton erreur est tout à fait logique, vu que tu es en local et que tu demandes un envoi de mail, à moins que ton poste soit le serveur smtp ( monsite@orange.fr ) comme mentionné dans ton script php.
    Essayes de publier ton site en ligne et réessayes ton code.
    Bon courage.
    1. Modérateur
      Bonjour,

      Roussos : Il est tout à fait possible d'envoyer un mail depuis son poste LOCAL ..

      @Papyclic :
      Déjà, première chose à faire lorsque tu as un souci.... faire du débogage ....
      As tu regardé si tes variables sont bonnes ? (via des ECHO ?? )

      Je te propose de tester ça :
      echo "<br> TO : ".$to;
      echo "<br> SUJET : ".$sujet;
      echo "<br> ENTETE : ".$entete;
      
      if(mail($to, $sujet, $body, $entete)){
        echo "<pre> MAIL ENVOYE ...</pre>";
      }else{
        echo "<pre> ERROR ! Mail non envoyé </pre>";
        print_r(error_get_last());
      }
      
      


      Par contre... pour ma part .. je préfère utiliser la class PHPMailer plutôt que la fonction MAIL de PHP.

      1. Bonsoir,
        je ne pourrais le dire parce que j'ai jamais essayé.
        Si tu dis que ca fonctionne alors il me reste à tester.
        Merci.