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

Signaler
Messages postés
12
Date d'inscription
jeudi 25 mai 2006
Statut
Membre
Dernière intervention
19 mars 2019
-
Messages postés
12
Date d'inscription
jeudi 25 mai 2006
Statut
Membre
Dernière intervention
19 mars 2019
-
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;
} ?>

1 réponse

Messages postés
32451
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
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;
	}	
	

   
	
	
}



?>

Messages postés
12
Date d'inscription
jeudi 25 mai 2006
Statut
Membre
Dernière intervention
19 mars 2019

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…