[PHPmailer] Une erreur que je ne trouve pas

Résolu/Fermé
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012 - 22 mai 2012 à 10:47
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012 - 23 mai 2012 à 11:49
Bonjour à toutes et à tous.

Dans le cadre de mon stage, je désirerais mettre en place la possibilité de faire du publipostage. Cependant, j'ai un petit problème et je ne trouve pas d'où il vient. Quelqu'un pourrait m'aider ?
voici mon code :
$CourielBcc=array();
 $nbmail=0;

 if(isset($_POST['nbmail'])?$_POST['nbmail']:"")
 {
	$nbmail=isset($_POST['nbmail'])?$_POST['nbmail']:"";
	for($i=1;$i<=$nbmail;$i++)
	{
		$CourielBcc[$i]=isset($_POST['CourielBcc']['$i'])?$_POST['CourielBcc']['$i']:"";
	}
 }else{
	$CourielAdr=isset($_POST['Couriel'])?$_POST['Couriel']:"";
 }

 $subject=isset($_POST['Sujet'])?$_POST['Sujet']:"";

 $msg=isset($_POST['Message'])?$_POST['Message']:"";


require "C:/Users/UD CFTC 94/Desktop/Base-de-Donnee/PHPMailer_5.2.1/PHPMailer_5.2.1/class.phpmailer.php";

	$mail = new PHPmailer();
	$mail->SetLanguage('fr');
	$mail->IsSMTP();
	$mail->SMTPAuth=true;
	$mail->Host='smtp.wanadoo.fr';
	$mail->Port=587;
	$mail->Username='xxx';
	$mail->Password='xxx';
	$mail->From='xxx@xxx';
	$mail->AddAddress('<xxx@xxx>');
	if($nbmail == 0)
	{
		$mail->AddAddress('<'.$CourielAdr.'>');
	}else{
		$mail->AddAddress('<xxx@xxx>');
		for($j=1;$j<=$nbmail;$j++)
		{
			$mail->AddBcc('<'.$CourielBcc[$j].'>');
		}
	}
	$mail->Subject=$subject;
	$mail->Body=$msg;

	if(!$mail->Send()){ //Teste le return code de la fonction
	  echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7)
	}
	else{	  
	  echo 'Mail envoyé avec succès';
	}
	$mail->SmtpClose();
	unset($mail);

 include('index.php')

 ?>
</body>
</html>

mon message d'erreur est : Vous devez fournir au moins une adresse de destinataire.

Je vous remercie d'avance pour les réponse qui pourraient m'être donnée et vous souhaite une agréable journée.

7 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
22 mai 2012 à 16:03
$CourielBcc=array();
 $nbmail=0;
//la tu mélanges  la methode de test ternaire et la methode "classique"
/*
 if(isset($_POST['nbmail'])?$_POST['nbmail']:"")
 {
	$nbmail=isset($_POST['nbmail'])?$_POST['nbmail']:"";
	for($i=1;$i<=$nbmail;$i++)
	{
		$CourielBcc[$i]=isset($_POST['CourielBcc']['$i'])? $_POST['CourielBcc']['$i']:"";
	}
 }else{
	$CourielAdr=isset($_POST['Couriel'])?$_POST['Couriel']:"";
 }
*/
if(isset($_POST['nbmail']))
 {
	$nbmail=$_POST['nbmail']);
	for($i=1;$i<=$nbmail;$i++)
	{
		$CourielBcc[$i]=isset($_POST['CourielBcc']['$i'])? $_POST['CourielBcc']['$i']:"";
	}
 }else{
	$CourielAdr=isset($_POST['Couriel'])?$_POST['Couriel']:"";
 }
 $subject=isset($_POST['Sujet'])?$_POST['Sujet']:"";

 $msg=isset($_POST['Message'])?$_POST['Message']:"";

//la ton appli n'est pas portable, il faut mettre une adresse relative par rapport à ton script
require "C:/Users/UD CFTC 94/Desktop/Base-de-Donnee/PHPMailer_5.2.1/PHPMailer_5.2.1/class.phpmailer.php";

.......
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
Modifié par Une pattate qui vole le 22/05/2012 à 16:39
Bonjour, merci de ton aide.

Par contre, pourrais-tu t'expliquer, je n'ai commencé le php qu'il y a trois semaine pour mon stage aussi, deux ligne de commentaire et un code corrigé disant où j'ai faux mais pas pourquoi j'ai faux n'est n'est pas ce qu'il y a de mieux pour m'aider à comprendre mon problème ^^'''
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
22 mai 2012 à 16:45
//je t'avais mis la correction en dessous
//donc:

$nbmail=isset($_POST['nbmail'])? $_POST['nbmail']:"";
/*
ça c'est la methode ternaire
qui equivaut à 
if(isset($_POST['nbmail'])){
	$nbmail=$_POST['nbmail'];
}else{
	$nbmail="";
}
*/

 //tu ne peux pas mélanger un test if avec la methode ternaire
	if(isset($_POST['nbmail'])? $_POST['nbmail']:"")
	
	//puisque dans cette ligen qu'est ce qui est égal à $_POST['nbmail'] ou ""  ??
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
22 mai 2012 à 16:51
Désolé, comme mon code était plutôt gros, j'avais pas noté la correction ^^'''
j'ai remarqué seulement après les /* */

Sinon, grâce à ton explication, je comprend mieux mon problème merci ^^
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
22 mai 2012 à 16:58
bon, j'ai ajouté effectué les modifications recommandé, mais ça ne change rien.
J'ai toujours la même erreur ...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
22 mai 2012 à 17:04
mets une trace:

a la ligne juste avant
$mail = new PHPmailer();
	$mail->SetLanguage('fr');
	$mail->IsSMTP();


tu mets:

echo "Adresse saisie: ".$CourielAdr;
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 08:59
Je ne sais pas si ça sera utile, mon $CourielAdr je ne le set que si j'ai un seul destinataire. si j'ai plusieurs destinataire, je set $CourielBcc, et de base, j'ai
$mail->AddAddress('<xxx@xxx>')
donc je suis sensé avoir une adresse.
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 09:34
bon, j'ai ajouté une ligne à mon code afin de toujours avoir une adresse transféré via la méthode POST, et maintenant je vois clairement que ce qui ne marche pas, c'est le AddBcc ...
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 09:49
bon, mon problème viens peut-être de mon code dans lequel se trouve la méthode POST
$i=1;
 $CourielBcc=array();
 $mail=0;

 if(isset($_POST['Couriel'])?$_POST['Couriel']:"")
 {
	$Couriel=isset($_POST['Couriel'])?$_POST['Couriel']:"";
 }else{
	$mail=isset($_POST['nbmail'])?$_POST['nbmail']:"";
 while($i<=$mail)
 {
	$CourielBcc[$i]=isset($_POST['CourielBcc'][$i])?$_POST['CourielBcc'][$i]:"";
	$i++;
 }
 }

 echo'<table><tr><td><br />Entrer le corps du message :</br>
 <FORM Method="POST" Action="sending_mail.php">

 <input type=hidden name=MailMaitre value="xxx@xxx">';

 if($mail == 0)
 {
	echo'<input type=hidden name="CourielBcc[1]" value='.$Couriel.'><br />';
 }else{
	for($i=1;$i<=$mail;$i++)
	{
		echo'<input type=hidden name="CourielBcc['.$i.']" value='.$CourielBcc[$i].'><br />';
	}
 }

 echo'Sujet : <input type=text size=50 name=Sujet><br />
 <textarea cols="50" name=Message>Entrer votre message</textarea>
 <br><input type=submit value=Envoie>
 </FORM></td></tr>

 <tr><td><FORM Mthod="POST" Action="index.php">
 <input type=submit value=Annuler>
 </FORM></td><tr>';

Si vous voyez le problème, merci de me le signaler, car moi j'arrive vraiment pas à le trouver :/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 mai 2012 à 10:10
il est très difficile de t'aider si tu procèdes ainsi,

on te suggère des modifs (ne pas mélanger la méthode ternaire et les if
mettre un echo qui nous renseigne sur le contenu d'une varaible reçue

tu ne le fait pas alors ????
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
Modifié par Une pattate qui vole le 23/05/2012 à 11:05
Pour la méthode ternaire, je l'ai "apprise" que hier. Travaillant la base de donnée sur les lieu de mon stage et non sur mon ordinateur personnel, je n'ai pas encore pu modifier tout les fichier où j'ai besoin de le faire.

Pour ce qui est de mettre un echo, je vais répondre d'une manière basique en java:
int i = 2; 
if(i==1) 
{ 
          int j = 2; 
} 
System.out.println(j);

Que va retourner ce bout de code ?
«error undefined variable j»
avec mon echo, au stade où en était mon code, c'était le même problème, il arrivait un cas ou $CourielAdr n'était pas définie. Voila pourquoi mettre un echo ne servait à rien. Je te remercie de tes conseils, il me sont très utiles, mais s'ils ne sont pas entièrement compatible avec mon code, il ne m'est pas possible de les appliquer ;)

bon, au passage, voila la version "évolué" de mon premier code :
 $CourielBcc=array(); 
 $i=1; 

 $CourielAdr=isset($_POST['MailMaitre'])?$_POST['MailMaitre']:""; 

 while(isset($_POST['CourielBcc']['$i'])) 
 { 
 $CourielBcc[$i]=$_POST['CourielBcc']['$i']; 
 $i++; 
 } 

// Subject 
 $subject=isset($_POST['Sujet'])?$_POST['Sujet']:""; 

// Message 
 $msg=isset($_POST['Message'])?$_POST['Message']:""; 


require "PHPMailer_5.2.1/PHPMailer_5.2.1/class.phpmailer.php"; 

 $mail = new PHPmailer(); 
 $mail->SetLanguage('fr'); 
 $mail->IsSMTP(); 
 $mail->SMTPAuth=true; 
 $mail->Host='smtp.wanadoo.fr'; 
 $mail->Port=587; 
 $mail->Username='xxx'; 
 $mail->Password='xxx'; 
 $mail->From='xxx@xxx'; 
 $mail->AddAddress($CourielAdr); 
 foreach($CourielBcc as $couriel) 
 { 
  $mail->AddBCC('<'.$couriel.'>'); 
 } 
 $mail->Subject=$subject; 
 $mail->Body=$msg; 

 if(!$mail->Send()){ //Teste le return code de la fonction 
   echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) 
 } 
 else{    
   echo 'Mail envoyé avec succès'; 
 } 
 $mail->SmtpClose(); 
 unset($mail); 
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 11:21
bon, j'ai trouvé mon problème ... mon programme n'entre pas dans les boucles ...
Et là, je ne sais pas comment régler le problème :/
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 mai 2012 à 11:21
bon je vais au passage t'apprendre comment afficher le contenu d'un array

echo '<pre>';
print_r($CourielBcc );
echo '</pre>';

Tu ne m'apprend rien concernant l'echo d'une variable, mais si tu as indefined c'est que tu n'est pas passé dans la condition qui la charge donc c'est quand même une indication non !
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 11:32
pour comment afficher un array, merci beaucoup ^^ ça me fera gagner de la place dans le code.

Sinon, pour mon programme, c'était soit une condition soit aucune, donc en fonction des éléments, je savais que je n'aurais pas ma variable définie. de fait, ça aurait pu ne pas m'aider et plutôt m'induire en erreur.
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 11:45
rigole un coup, j'ai réglé mon problème ...
while(isset($_POST['CourielBcc']['$i'])) 
 { 
 $CourielBcc[$i]=$_POST['CourielBcc']['$i']; 
 $i++; 
 } 
est devenu :
while(isset($_POST["CourielBcc"]["$i"])) 
 { 
 $CourielBcc[$i]=$_POST["CourielBcc"]["$i"]; 
 $i++; 
 } 


et la boucle foreach est repassé en simple boucle for ...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
23 mai 2012 à 11:44
le mesage d'erreur que tu as c'est bien: "Vous devez fournir au moins une adresse de destinataire"

donc il faut que tu mettes des traces donc des echo dans ton code pour voir quelles sont les variables qui sont vides, le print-r te serra utile si tu le mets juste avant le debut de l'envoi du mail

$mail = new PHPmailer();
$mail->SetLanguage('fr');
$mail->IsSMTP();
$mail->SMTPAuth=true;


une fois debugué tu supprimes bien sur toutes ces traces
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
23 mai 2012 à 11:49
je n'avait plus le problème de destinataire. j'avais réglé ce problème en remettant un isset($_POST[]) pour obtenir une adresse sûr.
mon problème était maintenant dans les boucles mais comme dit dans mon précédent commentaire, c'est réglé.

Merci beaucoup d'avoir pris un peu de ton temps pour m'aider ^^
0