[RESOLU] Problème multiple email PhpMailer

Eléphant du PHP | 418 Messages

11 oct. 2012, 04:04

Salutation

Suite à ce message, voici mon nouveau problème:

Voici que lorsque j'ai plusieurs emails, ça m'affiche un message me disant qu'il faut que je renseigne un email, alors qu'avec un seul mail, ça fonctionne.
Mailer Error: You must provide at least one recipient email address.
Voici le code utilisé pour l'envoi de l'email
<h3>Envoie d'emails de groupe</h3>
<div id="sous_content">
<?php
/*************/
if (isset($_POST['envoyer']))
{
	//parsing des variables
	$message = $_POST['message'];
	$message = nl2br($message);
	$selected_rank = $_POST['selected_rank'];
	$selected_rank = ($selected_rank!=0)?$selected_rank:'';
	$condition_rank = ($selected_rank!=0)?'AND t_users.rank_id = :rank':'';
	$req = 'SELECT
	 t_users.users_mail
	FROM t_users
    LEFT JOIN t_rank ON t_rank.rank_id = t_users.rank_id
    LEFT JOIN t_online ON online_id = users_id
	WHERE users_verif = :users_verif AND t_users.rank_id != :users_verif '.$condition_rank.'
	ORDER BY users_id ASC';
	$query = $cnx->prepare($req);
	$query->bindValue(':users_verif', 1,PDO::PARAM_BOOL);
	if ($selected_rank!=0) { $query->bindValue(':rank', $selected_rank,PDO::PARAM_INT); }
	$query->execute();
	
$body = "<html><body>
	$message
	<br /><br />
	Cordialement, l'administrateur de ".SITE_NAME.".
	<br /><br />
</body></html>";
$plain = 'contactez <a href="mailto:'.SITE_MAIL.'">'.SITE_MAIL.'</a> si vous voyez ce message'; // optional, comment out and test

#initiate PHPMailer class
$mail = new PHPMailer();
#set the from e-mail address
$mail->From = SITE_MAIL;
#set the from name
$mail->FromName = SITE_NAME;
#set the e-mail type to HTML
$mail->IsHTML(true);
#the subject of the email
$mail->Subject = "Couriel de ".SITE_NAME;
#the HTML content of the email
$mail->Body = $body;
#the plain text version
$mail->AltBody = $plain;
#add subscribers address as the recipient
		$tab = array();
		while($data = $query->fetch(PDO::FETCH_OBJ))
		{
			$tab[] = trim($data->users_mail);
		}
	$email = implode(',',$tab);
	#add subscribers address as the recipient
	$mail->AddAddress($email);
	#sends the newsletter
	$mail->Send();
	#clears the recipient address
	$mail->ClearAddresses();
	if(!$mail->Send()) {
		echo "Mailer Error: " . $mail->ErrorInfo;
	}
	else {
		echo 'email envoyé';
	}
	echo '<br /> '.$email;
}

/*************/
	$query = $cnx->prepare('SELECT
	 t_rank.rank_id,
	 t_rank.rank_libelle
	FROM t_rank
	WHERE t_rank.rank_id != :rank1 AND t_rank.rank_id != :rank2
	ORDER BY rank_id ASC');
	$query->bindValue(':rank1', 1,PDO::PARAM_INT);
	$query->bindValue(':rank2', 2,PDO::PARAM_INT);
	$query->execute();    
	//Si la requ&ecirc;te retourne un truc, le membre existe
?>
	<form action="index.php?r=newsletter" method="POST">
	Membre(s) :
	<br />
	<select name="selected_rank">
		<option value="0">Tous</option>
	<?php
		while($data = $query->fetch())
		{
	?>
		<option value="<?php echo $data['rank_id']; ?>"><?php echo $data['rank_libelle']; ?></option>
	<?php
		}
	?>
		</select>
	<br />
	Votre message :
	<br />
	<textarea class="span11" name="message" id="texte" cols="90" rows="10"></textarea>
	<br />
	<input type="submit" name="envoyer" value="Envoyer l'email" />
	
	</form>
Pouvez vous m'expliquer comment faire pour faire l'envoie de l'emai?

Merci de votre aide

Cordialement

Eléphant du PHP | 418 Messages

11 oct. 2012, 05:50

Problème résolut, mauvaise concéption du script qui parse les données pour la varibale $mail -> xxx

Merci à vous Cordialement

Ps: Si le script vous intéresse, voici un première base, c'est certainement améliorable, mais j'ai pas besion de plus que d'envoyer des infos aux groupes souhaités ^^
<h3>Géstionnaire des courriels de masse</h3>
<div id="sous_content">
<?php
/*************/
if (isset($_POST['envoyer']))
{
	if (empty($_POST['selected_rank']) || empty($_POST['message']) || empty($_POST['titre'])){
		echo '<p><span class="alert">Remplissez tous les champs SVP</span></p>';
	}
	else
	{
		$selected_rank = $_POST['selected_rank'];
		$selected_rank = ($selected_rank!=0)?$selected_rank:'';
		// si on a choissis tout le monde, alors
		$condition_rank = ($selected_rank!=0)?'AND t_users.rank_id = :rank':'';
		// on prépare la requete
		$req = 'SELECT
			 t_users.users_name,t_users.users_mail
			FROM t_users
			LEFT JOIN t_rank ON t_rank.rank_id = t_users.rank_id
			LEFT JOIN t_online ON online_id = users_id
			WHERE users_verif = :users_verif AND t_users.rank_id != :users_verif AND t_users.rank_id != :users_bannis AND t_users.rank_id != :users_anonyme '.$condition_rank.'
			ORDER BY users_id ASC';
		$query = $cnx->prepare($req);
		$query->bindValue(':users_verif', 1,PDO::PARAM_BOOL);
		$query->bindValue(':users_bannis', 1,PDO::PARAM_INT);
		$query->bindValue(':users_anonyme', 2,PDO::PARAM_INT);
		if ($selected_rank!=0) { $query->bindValue(':rank', $selected_rank,PDO::PARAM_INT); }
	/**/
		//parsing des variables
		$message = $_POST['message'];
		$titre = $_POST['titre'];
		$message = nl2br($message);
		// on définit le message
		#SITE_NAME est une constante prédéfinie
		#SITE_MAIL est une constante prédéfinie
		$body = "<html><body>
			<center><img src='url de l'image' /></center>
			<h2>$titre</h2>
			$message
			<p>Cordialement, l'administrateur de ".SITE_NAME.".</p>
		</body></html>"; 
		$subject = "Lettre d'information de ".SITE_NAME; // on définit le titre
		$altbody = 'contactez <a href="mailto:'.SITE_MAIL.'">'.SITE_MAIL.'</a> si vous voyez ce message'; // Si le message à une erreur
		#initiate PHPMailer class
		$mail = new PHPMailer();
		$mail->IsSMTP(); // telling the class to use SMTP
		$mail->SMTPAuth = true; // enable SMTP authentication
		// Attention à définir des constantes, ou des variables pour les valeurs de "Port" à "auth_password"
		$mail->Port = SITE_SMTP_PORT; // set the SMTP port
		$mail->Host = SITE_SMTP; // SMTP server
		$mail->Username = SITE_MAIL; // SMTP account username
		$mail->Password = SITE_SMTP_PASS;
		$mail->auth_username = SITE_MAIL; // SMTP account username
		$mail->auth_password = SITE_SMTP_PASS;
		$mail->AddReplyTo(SITE_MAIL, SITE_NAME);
		$mail->SetFrom(SITE_MAIL, SITE_NAME);
		// $mail->AddAddress(SITE_MAIL);
		$query->execute();// on exécute la requete
		while($data = $query->fetch(PDO::FETCH_ASSOC))
		{
			$email = $data['users_mail'];
			$nom = $data['users_name'];
			$mail->AddBCC ($email,$nom); // on envoie en caché, afin que personne ne voye les emails des utilisateur, pour envoyer normalement, c'est AddAdresse
		}
		$mail->Subject = $subject;
		$mail->AltBody = $altbody;
		$mail->MsgHTML($body);
		if(!$mail->Send()) {
			echo "Mailer Error: " . $mail->ErrorInfo;
		}
		else {
			echo '<p><span class="reussi">email envoyé</span></p>
		<script type="text/javascript">
			<!--
			setTimeout(function()
			{
				window.location.href="./";
			},2000);
			//-->
		</script>';
		}
	}
}

/*************/
	$query = $cnx->prepare('SELECT
	 t_rank.rank_id,
	 t_rank.rank_libelle
	FROM t_rank
	WHERE t_rank.rank_id != :rank1 AND t_rank.rank_id != :rank2
	ORDER BY rank_id ASC');
	$query->bindValue(':rank1', 1,PDO::PARAM_INT);
	$query->bindValue(':rank2', 2,PDO::PARAM_INT);
	$query->execute();    
	//Si la requ&ecirc;te retourne un truc, le membre existe
?>
	<form action="index.php?r=newsletter" method="POST">
	<fieldset>
		<legend>Envoie d'un courriel de masse :</legend>
		<dl>
			<dd>
				Séléctionner le groupe :<br />
				<select name="selected_rank">
					<option value="0">Tous</option>
<?php
					while($data = $query->fetch())
					{
?>
					<option value="<?php echo $data['rank_id']; ?>"><?php echo $data['rank_libelle']; ?></option>
<?php
					}
?>
				</select>
			</dd>
			<dd>
				Titre de l'email :<br />
				<input type="text" name="titre" value="" />
			</dd>
			<dd>
				Message de l'email :<br />
				<textarea class="span11" name="message" id="texte" cols="90" rows="10"></textarea>
			</dd>
			<dd>
				<input type="submit" name="envoyer" value="Envoyer l'email" />
			</dd>
		</dl>
	</fieldset>
	</form>
Cordialement