Problème de redirection après un envoi de newsletter
hashux
Messages postés12Date d'inscriptionjeudi 25 mai 2006StatutMembreDernière intervention19 mars 2019
-
2 oct. 2017 à 10:18
hashux
Messages postés12Date d'inscriptionjeudi 25 mai 2006StatutMembreDernière intervention19 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 ?
jordane45
Messages postés37534Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 6 juin 2023341 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;
}
}
?>
hashux
Messages postés12Date d'inscriptionjeudi 25 mai 2006StatutMembreDernière intervention19 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...
Modifié le 4 oct. 2017 à 13:04
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…