Envoi de liste de diffusion

Utilisateur anonyme - Modifié par dinolam le 30/11/2016 à 17:06
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 2 déc. 2016 à 11:37
Bonjour à Tous,

Je suis en train de faire un système de newsletter pour envoyer aux clients abonnés. Mon template mailing est un fichier php et non html car je récupère le contenu de mon fichier dynamiquement. Certains d'entre vous me diront d'aller chercher il y a plusieurs exemples sur internet. Rassurer-vous j'ai déjà fait de recherche mais je ne trouve pas un exemple adapté à mon cas. Je vous montre un exemple de mon code pour bien comprendre. Mais avant cela je rappelle que l'envoi de mail marche bien et je reçois belle et bien le contenu de mon mail (template). Seulement le problème est que mon template ne s'affiche pas correctement vu que je récupère le contenu dynamiquement il m'affiche tout le code des requêtes dans le mailing. Le contenu de mon fichier php est du html classique comme on fait pour les newsletters. C'est juste à la place des textes je mets des variables. Pour bien préciser j'ai fait un test avec un fichier (.html) et ça s'affiche correctement. Donc c'est le bout de code php qui cause problème ou bien le fichier (.php) lui même. Ce sont des hypothèses je n'en sais rien encore. C'est ma première expérience des listes de diffusion en php donc je ne maîtrise pas encore ce côté.

J'ai besoin de votre expérience pour m'aiguiller et m'aider peut être à résoudre ce problème. Merci par avance !

Code:


// fichier qui fait le traitement d'envoi de mail : envoi_mail.php
$now = gmdate('D, d M Y H:i:s') . ' GMT';
header("Expires: $now");
header("Last-Modified: $now");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

include "connect.php";

$req = $db->prepare('SELECT email FROM newsletter WHERE envoye = '0' LIMIT 100');
$req->execute() or die(print_r($req->errorInfo()));

foreach ($req->fetchAll() as $row) {
$sujet_mail = "Newsletter Nov 2016";
$dest = $row["email"];
$mail = "newsletter@domaine.com";
$envoyeur = "XXX Newsletter <$mailbox>";
$text_mail = "";

//fichier template mailing
$fp = fopen("newsletter.php", "r");

while (!feof($fp)) {
$text_mail .= fgets($fp, 1024);
}
fclose($fp);

$header = "Content-Type: text/html\n";
$header .= "From: $envoyeur\n";
$header .= "Reply-To: $mail\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";
$header .= "X-Sender: $mail\n";
$header .= "Return-Path: $mail\n";
$header .= "Errors-To: $mail\n";
$header .= "Date: ".date("r")."\n";
$header .= "MIME-Version: 1.0\n";

$mailval = mail("$dest", $sujet_mail, $text_mail, $header);

if ($mailval == true) {
$q = array('email'=>$dest);
$sql = "UPDATE newsletter SET envoye = '1' WHERE email = :email";
$req = $db->prepare($sql);
$req->execute($q) or die(print_r($req->errorInfo()));

echo '<p class="success">Votre mail a bien été envoyé avec success !</p>';
} else {
echo '<p class="error">Votre mail n\'a pas pu être envoyé.</p>';
}
}

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
2 déc. 2016 à 11:37
Salut,

Pas grand chose à dire, tu fais un accès en lecture à ton fichier php donc forcément ca envois le contenu sans traitements ...

Il faudrait que tu montre le code de ton "newsletter.php", mais la solution est simple: il faut include ta page php qui aura un point d entrée pour récupérer le contenu HTML généré.

par exemple aujourd'hui tu as:

<?php 
     echo '<html><body>blabla</body></html>';
?>



Donc dans ce cas ton mail contiendra ce texte brut, et si tu veux simplement qu'il affiche "blabla", il faut que le fichier contienne:

<?php 
function getStringTemplate (){

    $myNews = '"<html><body>blabla</body></html>';
    
    return $myNews;

}
?>


Avec :

// fichier qui fait le traitement d'envoi de mail : envoi_mail.php
$now = gmdate('D, d M Y H:i:s') . ' GMT';
header("Expires: $now");
header("Last-Modified: $now");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

include "connect.php";
include "newsletter.php";

$req = $db->prepare('SELECT email FROM newsletter WHERE envoye = '0' LIMIT 100');
$req->execute() or die(print_r($req->errorInfo()));

foreach ($req->fetchAll() as $row) {
 $sujet_mail = "Newsletter Nov 2016";
 $dest = $row["email"];
 $mail = "newsletter@domaine.com";
 $envoyeur = "XXX Newsletter <$mailbox>";
 $text_mail = "";

 //fichier template mailing
 $text_mail = getStringTemplate();

 $header =  "Content-Type: text/html\n";
 $header .= "From: $envoyeur\n";
 $header .= "Reply-To: $mail\n";
 $header .= "X-Mailer: PHP/".phpversion()."\n";
 $header .= "X-Sender: $mail\n"; 
 $header .= "Return-Path: $mail\n";
 $header .= "Errors-To: $mail\n"; 
 $header .= "Date: ".date("r")."\n";
 $header .= "MIME-Version: 1.0\n";

 $mailval = mail("$dest", $sujet_mail, $text_mail, $header);

  if ($mailval == true) {
      $q = array('email'=>$dest);
      $sql = "UPDATE newsletter SET envoye = '1' WHERE email = :email";
      $req = $db->prepare($sql);
      $req->execute($q) or die(print_r($req->errorInfo()));

      echo '<p class="success">Votre mail a bien été envoyé avec success !</p>';
   } else {
      echo '<p class="error">Votre mail n\'a pas pu être envoyé.</p>';
   }
}




naga
0
Rejoignez-nous