Fonction mail

papyclic Messages postés 446 Date d'inscription   Statut Membre Dernière intervention   -  
roussos Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   -
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;  
 }
}

A voir également:

2 réponses

roussos Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   8
 
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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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.

0
roussos Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   8
 
Bonsoir,
je ne pourrais le dire parce que j'ai jamais essayé.
Si tu dis que ca fonctionne alors il me reste à tester.
Merci.
0