Page 1 sur 1

probleme envoi plusieurs mail

Posté : 26 mai 2008, 12:58
par etc57
Bonjour,

Je vous présente ma fonction demailing de newletter, qui mail a partir d'un groupe d'utilisateur défini par l'expéditaire.

quand il n'y a que 1 destinataire, la fonction marche parfaitement
des que je passe a 2 elle bug
donc je ne comprend pas ce qui fait que ca ne marche pas des qu'on a plus d'un destinataire.

$sql = "SELECT * FROM newsletters WHERE newsletter_id=".$id."";	
$result = mysql_query($sql);
$var = mysql_fetch_array($result);
		
		$sql2 = "SELECT * FROM users WHERE users_group IN($listgroups) AND users_newsletter=1";
		$result2 = mysql_query($sql2);
		$nbligne=mysql_num_rows($result2);
		
		for ($i=1;$i<=$nbligne;$i++)
		{
		$ligne=mysql_fetch_array($result2);
		$civiliteMail=$ligne["users_civilite"];
		$nomMail=htmlentities($ligne["users_lastname"]);
		$prenomMail=htmlentities($ligne["users_name"]);
		$mailMail=$ligne["users_email"];
		$commercial=htmlentities($ligne["commercial"]);
		$nomduguguss="$civiliteMail $nomMail $prenomMail";
		
		

$email_expediteur='[email protected]';
$email_reply='[email protected]';

$message_texte ='Bonjour, '.$nomduguguss."\n".'';
id='.$id;
$destinataire = $mailMail;

$sujet ='Newsletter Leaseplan';


$frontiere = '-----=' . md5(uniqid(mt_rand()));


$headers = 'From: "Leaseplan" <'.$email_expediteur.'>'."\n";
$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';

$fichier = 'This is a multi-part message in MIME format.'."\n\n";
$fichier .= '--'.$frontiere."\n";
$fichier .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
$fichier .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$fichier .= $message_texte."\n\n";

$fichier .= '--'.$frontiere."\n";
$fichier .= 'Content-Type: text/html; charset = \"iso-8859-1"'.\"\n"; 
$fichier .= 'Content-Transfer-Encoding: quoted-printable'."\n\n"; 

$fichier .= '<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Newsletter</title>
<style type="text/css">
<!--
liste des styles ....
-->
</style>
</head>

<body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0">
<table width="740" border="0" cellspacing="0" cellpadding="0">
<tr>
    <td colspan="2" height="152" background="../newsletter/img/header.jpg">&nbsp;</td>
</tr>
<tr>
<td align="center" valign="top"><br>
<br>
<table width="400" border="0" cellspacing="0" cellpadding="0"><tr>
<td align="left"><span class="presentation2">';
$temp = str_replace("<","<",$nomduguguss);
$fichier .= 'Bonjour,' .stripslashes($temp);
$fichier .='</span><br></td></tr><tr><td align="left"><span class="presentation">';
$temp = str_replace("<","<",$commercial);
$fichier .= 'Commercial : ' .stripslashes($temp);
$fichier .='</span><br></td></tr><tr><td align="right">

<br><br><p><span class="newsletter">';

$temp = str_replace("<","<",$var['newsletter_nom']); 
$temp = str_replace(">",">",$temp);
$temp = str_replace("&","&",$temp);
$fichier .= stripslashes($temp);

$fichier .='</span><br><span class="date">';

$fichier .= date( 'd.m.Y',$var['newsletter_date']);

$fichier .='</span></p></td></tr><tr><td width="400"><p align="justify" class="texte" style="margin:10px">';

$temp = str_replace("<","<",$var['newsletter_texte']); 
$temp = str_replace(">",">",$temp);
$temp = str_replace("&","&",$temp);
$fichier .= stripslashes($temp);



$fichier .= ' <p><br>
    </p>
    </td></tr>
  <tr>
    <td height="62" colspan="2" class="fondorange"><p class="blanc" style="margin:10px">&nbsp;<br>
      &nbsp;</p></td>
  </tr>
</table>
</body>
</html>';


mail($destinataire,$sujet,$fichier,$headers);

}

Si vous pouvez m'eclairer sur les raisons

merci d'avance

Posté : 26 mai 2008, 13:02
par ouckileou
ça veut dire quoi "elle bug" ???

Posté : 26 mai 2008, 13:15
par etc57
le mail au premier utilisateur de la liste est envoye

ensuite il semble que le script s'arrete et j'obtiens une page blanche

lors de l'execution quand il n'y a que 1 destinataire, la requete s'execute en genre 0.5s

des que je passe a 2 utilisateur, la requete mets 10s a s'executer et seul le premier destinataire recoit le mail avant l'erreur.

Posté : 26 mai 2008, 13:34
par caroube
POur déterminer où est le problème, commence par le décomposer.
Fais juste une boucle du type
 for ($i=1;$i<=$nbligne;$i++) {
  $sujet ="Newsletter $i";
  $body ="Test $i";
  mail($destinataire[$i],$sujet,$fichier,$headers); 
}
Ensuite, sors de ta boucle tout ce qui n'a pas besoin d'être positionné à chaque fois. Du type ce n'est pas la peine de faire 50 fois $expediteur = "[email protected]"

Posté : 26 mai 2008, 13:39
par etc57
je viens de m'apercevoir que le probleme venait du corps de mon corps de message ( la partie $ fichier )

quand je la change les mail s'envoie aux 2 personnes.

JE ne comprend pas comment le bug peut venir de la car si il y avait un souci cela ne devrait pas m'envoyer le 1 mail non ?

Posté : 26 mai 2008, 14:01
par zeus
<mode a moitié HS>
$nomdugugus
J'espère pour toi que tu ne feras jamais l'oubli du $ ...
Je ne pense pas que j'apprécierais de recevoir un mail avec "nomdugugus" en entête :?
</mode>

Posté : 26 mai 2008, 14:20
par caroube
Personnellement, je mettrais le corps HTML de l'email dans un fichier externe avec des NOM_EXPEDITEUR et des NOM_EXPEDITEUR.
Puis, mon programme lirait ce fichier externe et dans la boucle d'envoi, je ne ferais juste que des remplacements des NOM_EXPEDITEUR et NOM_EXPEDITEUR par leurs valeurs.

@Zeus : je m'étais fait exactement la même remarque. :roll: Savoir qu'on est des gugusses potentiels pour l'une des principales agences de com lorraine, c'est moyen moyen ... Ne pas oublier Google et le fait qu'un jour, quelqu'un en tapant lorweb tombera sur cette page !

Posté : 26 mai 2008, 17:29
par dunbar
Salut,

A première vue il faudrait peut-être déjà demander a MySQL de te retourner un message en cas d'erreur :arrow:
Un truc du genre
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
Puis il y aurais bien ceci :
sql = "SELECT * FROM newsletters WHERE newsletter_id=".$id.""; 
Correction :?:
$sql = "SELECT * FROM newsletters WHERE newsletter_id=".$id.""; 
$nomduguguss="$civiliteMail $nomMail $prenomMail"; 
Correction
$nomduguguss=$civiliteMail . $nomMail . $prenomMail; 
id='.$id;
Correction je suppose :oops:
Mais je comprend pas se que cela fait là :?:
$id=$id;
Et pour finir
$temp = str_replace("<","<",$nomduguguss); 
$fichier .= 'Bonjour,' .stripslashes($temp); 
$fichier .='</span><br></td></tr><tr><td align="left"><span class="presentation">'; 
$temp = str_replace("<","<",$commercial); 
$fichier .= 'Commercial : ' .stripslashes($temp); 
$fichier .='</span><br></td></tr><tr><td align="right"> 

<br><br><p><span class="newsletter">'; 

$temp = str_replace("<","<",$var['newsletter_nom']);  
$temp = str_replace(">",">",$temp); 
$temp = str_replace("&","&",$temp); 
$fichier .= stripslashes($temp); 

$fichier .='</span><br><span class="date">'; 

$fichier .= date( 'd.m.Y',$var['newsletter_date']); 

$fichier .='</span></p></td></tr><tr><td width="400"><p align="justify" class="texte" style="margin:10px">'; 

$temp = str_replace("<","<",$var['newsletter_texte']);  
$temp = str_replace(">",">",$temp); 
$temp = str_replace("&","&",$temp); 
$fichier .= stripslashes($temp); 


Correction
$temp = str_replace("<","<",$nomduguguss); 
$fichier .= 'Bonjour,' .stripslashes($temp); 
$fichier .='</span><br></td></tr><tr><td align="left"><span class="presentation">'; 
$temp .= str_replace("<","<",$commercial); 
$fichier .= 'Commercial : ' .stripslashes($temp); 
$fichier .='</span><br></td></tr><tr><td align="right"> 

<br><br><p><span class="newsletter">'; 

$temp .= str_replace("<","<",$var['newsletter_nom']);  
$temp .= str_replace(">",">",$temp); 
$temp .= str_replace("&","&",$temp); 
$fichier .= stripslashes($temp); 

$fichier .='</span><br><span class="date">'; 

$fichier .= date( 'd.m.Y',$var['newsletter_date']); 

$fichier .='</span></p></td></tr><tr><td width="400"><p align="justify" class="texte" style="margin:10px">'; 

$temp .= str_replace("<","<",$var['newsletter_texte']);  
$temp .= str_replace(">",">",$temp); 
$temp .= str_replace("&","&",$temp); 
$fichier .= stripslashes($temp); 


Avec un peu de chance qui sait :wink:

Posté : 26 mai 2008, 17:53
par zeus
C'est sympa de ta part dunbar, mais il vaut mieux l'aider à comprendre que corriger à sa place ;)

Sinon :
$nomduguguss="$civiliteMail $nomMail $prenomMail";
se remplace plutôt par :
$nomduguguss=$civiliteMail .' '. $nomMail .' '. $prenomMail;
pour garder les espaces

Posté : 26 mai 2008, 18:53
par dunbar
Sinon :
$nomduguguss="$civiliteMail $nomMail $prenomMail";
se remplace plutôt par :
$nomduguguss=$civiliteMail .' '. $nomMail .' '. $prenomMail;
pour garder les espaces
Ah..... oui les espaces j'ai oublier :oops: sorry :wink:

Posté : 27 mai 2008, 09:19
par etc57
je vous remercie tous de votre aide, qui ma aidé a trouvé mon problème et le coriger