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

hashux 7 Messages postés jeudi 25 mai 2006Date d'inscription 4 octobre 2017 Dernière intervention - 2 oct. 2017 à 10:18 - Dernière réponse : hashux 7 Messages postés jeudi 25 mai 2006Date d'inscription 4 octobre 2017 Dernière intervention
- 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;
} ?>
Afficher la suite 
7Messages postés jeudi 25 mai 2006Date d'inscription 4 octobre 2017 Dernière intervention

2 réponses

Répondre au sujet
jordane45 19214 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 2 oct. 2017 à 14:01
0
Utile
1
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;
	}	
	

   
	
	
}



?>

hashux 7 Messages postés jeudi 25 mai 2006Date d'inscription 4 octobre 2017 Dernière intervention - 4 oct. 2017 à 13:03
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…
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.