Envoi de liste de diffusion

-
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>';
}
}
Afficher la suite 

Votre réponse

1 réponse

Messages postés
4269
Date d'inscription
samedi 8 septembre 2007
Dernière intervention
29 août 2018
0
Merci
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
Commenter la réponse de nagaD.scar

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.