Problème de redirection après un envoi de newsletter

hashux Messages postés 12 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 19 mars 2019 - 2 oct. 2017 à 10:18
hashux Messages postés 12 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 19 mars 2019 - 4 oct. 2017 à 13:03
Bonjour à tous

J'ai créé un système d'envoi de newsletter à une liste client.
Une requête mysql va chercher les emails un par un dans la BDD et envoie mon texte (html) via la fonction mail(), le tout dans une boucle while.

Mon problème est qu'à la fin, il est sensé y avoir une redirection via un header(), sauf que rien ne se passe : les mails sont bien envoyés (bien que je ne sache pas si tout le monde le reçoit bien) mais je reste bloqué sur ma page d'envoi.
J'ai pensé que vu le nombre d'emails, c'était mon script qui prenait trop de temps, alors j'ai essayé avec un "foreach" qui prenait les adresses dans un tableau de session, mais j'ai le même résulat (j'ai même l'impression que c'est plus lent).
Si le problème venait du fait d'un "header already sent", je suppose que le script n'enverrait carrément rien du tout ? Et en plus, quand j'envoie le test, le redirection fonctionne bien, ce qui me fait écarter cette possibilité.
Je n'ai pas de message d'erreur…

Pouvez-vous m'aider à soit améliorer mon code, soit à me conseiller une autre méthode qu'un mail() dans un while ?

Merci d'avance

voici mon code source de la page d'envoi:
<?php
include("../../connections0/secure.php");
require_once('../../connections0/connect.php');
mysqli_select_db($connecture, $database);

$Subject = $_POST['sujet'];
$Couleur = $_POST['couleur'];
$Fichier = $_POST['fichier'];
$Texte = $_POST['texte'];

$MailHeader = 'From:xxx <newsletter@xxx.be>'."\r\n";
$MailHeader .='Reply-To: animation@xxx.be'."\r\n";
$MailHeader .='Mime-Version: 1.0'."\r\n";
$MailHeader .='Content-Type: text/html;charset=utf-8'."\r\n";
$enTete = '<html><body style="background-color:#'.$Couleur.'; margin:0px;"><center>
<table style="color:#fff;font-family: Lucida, Arial, Helvetica, sans-serif; font-size: 10px; text-align:center;" width="800px" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td height="20px">
<p>Si la newsletter ne s’affiche pas correctement, <a href="http://www.xxx.be/newsletter/xxx-news-'.$Fichier.'.html" rel="nofollow noopener noreferrer" target="_blank" style="color:#aaf;">cliquez ici</a>.</p>
</td>
</tr>
</table>';
$enTeteAvis ='<body style="background-color:#'.$Couleur.'; margin:0px;"><center>';
$Middle ='<table style="color:#fff;background-color:#'.$Couleur.';font-family: Lucida, Arial, Helvetica, sans-serif; font-size: 10px; text-align:center;" width="800px" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td height="20px">
<p>Vous recevez ce mail car cette adresse est enregistrée dans notre base de données. <a style="color:#aaf;" href="http://www.xxx.be/delete-newsletter.php?desi='; $Footer ='">Désinscription</a></p></td></tr></table></center></body></html>';

if($_POST['submit']=="Test"){
$MailTo = "communication@xxx.be";

$MailBody = $enTete.$Texte.$Middle.$MailTo.$Footer;
$Subject="Newstest: ".$Subject;

mail($MailTo, $Subject, $MailBody, $MailHeader);
mysqli_close($connecture);
header("location:index.php?test="); exit;
}elseif($_POST['submit']=="TestAvis"){
$MailTo = "communication@xxx.be";

$MailBody = $enTeteAvis.$Texte.$Middle.$MailTo.$Footer;
$Subject="NewsAvis: ".$Subject;

mail($MailTo, $Subject, $MailBody, $MailHeader);
mysqli_close($connecture);
header("location:index.php?test="); exit;
}elseif($_POST['submit']=="Bureau"){
$MailTo = "communication@xxx.be";
$MailTo .= ",direction@xxx.be";
$MailTo .= ",animation@xxx.be";

$MailBody = $enTete.$Texte.$Middle.$MailTo.$Footer;
$Subject="Newstest: ".$Subject;

mail($MailTo, $Subject, $MailBody, $MailHeader);
mysqli_close($connecture);
header("location:index.php?test="); exit;
}elseif($_POST['submit']=="Avis"){
$sql2="SELECT adresse_mail FROM xxx_mail";
$rqt2 = mysqli_query($connecture, $sql2) or die(mysqli_error($connecture));

while($data2 = mysqli_fetch_assoc($rqt2)){
$MailTo = $data2['adresse_mail'];
$MailBody = $enTeteAvis.$Texte.$Middle.$MailTo.$Footer;
mail($MailTo, $Subject, $MailBody, $MailHeader);
} // fin while
//mysqli_free_result($rqt2);
mysqli_close($connecture);
header("location:index.php?envoi="); exit;
}elseif($_POST['submit']=="Tous"){
$sql2="SELECT adresse_mail FROM xxx_mail";
$rqt2 = mysqli_query($connecture, $sql2) or die(mysqli_error($connecture));

while($data2 = mysqli_fetch_assoc($rqt2)){
$MailTo = $data2['adresse_mail'];
$MailBody = $enTete.$Texte.$Middle.$MailTo.$Footer;
mail($MailTo, $Subject, $MailBody, $MailHeader);
} // fin while
//mysqli_free_result($rqt2);
mysqli_close($connecture);
header("location:index.php?envoi="); exit;
} ?>
A voir également:

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 oct. 2017 à 14:01
Bonjour,

<?php
include("../../connections0/secure.php");
require_once('../../connections0/connect.php');
mysqli_select_db($connecture, $database);

//---------------------------------------------------------------------------//
//Activation des erreurs PHP
//---------------------------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display-errors','on');

//---------------------------------------------------------------------------//
// On augmente le max time execution du script
//---------------------------------------------------------------------------//
ini_set('max_execution_time', 0);

//---------------------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//---------------------------------------------------------------------------//
$Subject =  !empty($_POST['sujet']) ? $_POST['sujet'] : NULL;
$Couleur = !empty($_POST['couleur']) ? $_POST['couleur'] : NULL;
$Fichier = !empty($_POST['fichier']) ? $_POST['fichier'] : NULL;
$Texte = !empty($_POST['texte']) ? $_POST['texte'] : NULL;
$submit = !empty($_POST['submit']) ? $_POST['submit'] : NULL;


//---------------------------------------------------------------------------//
// Définition du header du mail
//---------------------------------------------------------------------------//
$MailHeader = 'From:xxx <newsletter@xxx.be>'."\r\n";
$MailHeader .='Reply-To: animation@xxx.be'."\r\n";
$MailHeader .='Mime-Version: 1.0'."\r\n";
$MailHeader .='Content-Type: text/html;charset=utf-8'."\r\n";
$enTete = '<html><body style="background-color:#'.$Couleur.'; margin:0px;"><center>
<table style="color:#fff;font-family: Lucida, Arial, Helvetica, sans-serif; font-size: 10px; text-align:center;" width="800px" border="0" cellspacing="0" cellpadding="0" >
	<tr>
		<td height="20px">
			<p>Si la newsletter ne s’affiche pas correctement, <a href="http://www.xxx.be/newsletter/xxx-news-'.$Fichier.'.html" rel="nofollow noopener noreferrer" target="_blank" style="color:#aaf;">cliquez ici</a>.</p>
		</td>
	</tr>
</table>';
$enTeteAvis ='<body style="background-color:#'.$Couleur.'; margin:0px;"><center>';
$Middle ='<table style="color:#fff;background-color:#'.$Couleur.';font-family: Lucida, Arial, Helvetica, sans-serif; font-size: 10px; text-align:center;" width="800px" border="0" cellspacing="0" cellpadding="0" >
	<tr>
		<td height="20px">
			<p>Vous recevez ce mail car cette adresse est enregistrée dans notre base de données. <a style="color:#aaf;" href="http://www.xxx.be/delete-newsletter.php?desi='; $Footer ='" rel="nofollow noopener noreferrer" target="_blank">Désinscription</a></p></td></tr></table></center></body></html>';


//---------------------------------------------------------------------------//
// Traitement du submit
//---------------------------------------------------------------------------//

function envoiMail($MailTo, $Subject, $MailBody, $MailHeader,$varreturn){
	if(mail($MailTo, $Subject, $MailBody, $MailHeader)){
	   //header("location:index.php?".$varreturn."=");  //on desactive la redirection le temps des tests !
	   echo "Mail envoyé !";
	   exit();
	}else{
		echo "Mail non envoyé !"
	}
}

if($submit){
	
	switch($submit){
		case 'Test':
		  $MailTo = "communication@xxx.be";
		  $MailBody = $enTete.$Texte.$Middle.$MailTo.$Footer;
		  $Subject="Newstest: ".$Subject;
		  $varreturn = 'test';
		  envoiMail($MailTo, $Subject, $MailBody, $MailHeader,$varreturn);
		 break;
		case 'Bureau':
		  $MailTo = "communication@xxx.be";
		  $MailTo .= ",direction@xxx.be";
	      $MailTo .= ",animation@xxx.be";
          $MailBody = $enTete.$Texte.$Middle.$MailTo.$Footer;
	      $Subject="Newstest: ".$Subject;
		  $varreturn = 'test';
		  envoiMail($MailTo, $Subject, $MailBody, $MailHeader,$varreturn);
		break;
		case 'Tous':
		  $sql2="SELECT adresse_mail FROM xxx_mail";
	      $rqt2 = mysqli_query($connecture, $sql2) or die(mysqli_error($connecture));
          $varreturn = 'envoi';
	      while($data2 = mysqli_fetch_assoc($rqt2)){
		   $MailTo = $data2['adresse_mail'];
		   $MailBody = $enTete.$Texte.$Middle.$MailTo.$Footer;
		   envoiMail($MailTo, $Subject, $MailBody, $MailHeader,$varreturn);
	      } // fin while
		   mysqli_close($connecture);
		break;
		case 'Avis':
		  $sql2="SELECT adresse_mail FROM xxx_mail";
	      $rqt2 = mysqli_query($connecture, $sql2) or die(mysqli_error($connecture));
		  $varreturn = 'envoi';
		  while($data2 = mysqli_fetch_assoc($rqt2)){
		    $MailTo= $data2['adresse_mail'];
		    $MailBody = $enTeteAvis.$Texte.$Middle.$MailTo.$Footer;
		    envoiMail($MailTo, $Subject, $MailBody, $MailHeader,$varreturn);
	      } // fin while
		   mysqli_close($connecture);
		 
		break;
		case 'TestAvis':
		  $MailTo = "communication@xxx.be";
          $MailBody = $enTeteAvis.$Texte.$Middle.$MailTo.$Footer;
	      $Subject="NewsAvis: ".$Subject;
		  $varreturn = 'test';
		 break;
		
		default:
		 echo "submit inconnu !"
		 print_r($_POST);
		 exit();
		 break;
	}	
	

   
	
	
}



?>

0
hashux Messages postés 12 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 19 mars 2019
Modifié le 4 oct. 2017 à 13:04
Bonjour et merci Jordane

Malheureusement, la redirection se fait bien mais c'est les mails qui ne partent pas... le script ne "mouline" même pas, dès que je clique sur envoyer, j'arrive tout de suite à la page de résultat avec "mail envoyé".

J'ai vérifié via phpinfo() et la valeur du max_execution_time de mon hébergeur (one.com) est à 50.

J'ai essayé de rajouter un "set_time_limit(10);" dans ma boucle while, le premier mail part mais j'obtiens une erreur "Warning: set_time_limit(): Cannot set max execution time limit due to system policy" alors que ini_get('safe_mode') me dit que mon php n'est justement pas en safe mode...

Je m'arrache les cheveux…
0
Rejoignez-nous