IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Envoi de liste de diffusion


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Points : 50
    Points
    50
    Par défaut 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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    // 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>';
            }
    }
    Et le fichier newsletter.php qui contient le contenu du mail dynamique.

    Cdlt,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La colonne email contient le contenu du mail dont des variables PHP c'est bien ça ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Donc si je résume bien c'est la cosntruction du corps du mail qui pose problème. Et de ce que je comprends, c'est ce bout de code qui s'en charge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $text_mail = "";
     
    //fichier template mailing
    $fp = fopen("newsletter.php", "r");
     
    while (!feof($fp)) {
    	$text_mail .= fgets($fp, 1024);
    }
    fclose($fp);
    Que fait réellement ce bout de code ? Il ouvre le fichier, le lit, et en écrit le contenu dans la variable $text_mail. A aucun moment, il n'exécute le code PHP qui se trouve dedans.
    En d'autres termes, ça fait un copier-coller pur et simple de ton fichier newsletter.php dans ton corps de mail.

    Peut-on voir ce que fait newsletter.php ? as-tu réellement besoin de le mettre dans un fichier à part ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Points : 50
    Points
    50
    Par défaut
    Re,

    Merci pour vos réponses rapides.
    Pour répondre à @sabotage oui se sont des variables php.
    Et pour @Celira, le problème c'est au niveau du corps du mail parce qu'il ne s'affiche pas correctement.
    La structure de mon fichier newsletter.php est bonne du côté html. Par contre tout code php n'est pas interprété car le code php s'affiche directement dans le mail.
    J'ai besoin d'un fichier php séparé parce que c'est que j'ai l’habitude de faire et j'ai une charte graphique à respecter. Donc il est plus simple de moi de séparer les deux fichiers : template et traitement.

    Fichier : newsletter.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
             <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
             <title>Newsletter</title>
        </head>
        <body>
             <table align="center" border="1" style="border:1px solid #" width="600px">
                    <?php
                         include "connect.php";
                         $req = $db->prepare('SELECT * FROM newsletter');
                         $req->execute() or die(print_r($req->errorInfo()));
                         $data = $req->fetch();
                    ?>
    	        <tr>
    		      <td style="text-align:center;">
    				<table align="center" border="1" style="border:1px solid" width="600px" height="200px">
    					<tr>
    						<td width="200px" height="20px"><?=$data['titre'];?></td>
                                                    <td width="200px" height="20px"><?=$data['sous-titre'];?></td>
                                                    <td width="200px" height="20px"><?=$data['contenu'];?></td>
    					</tr>
    				</table>
    			</td>
    		</tr>
                    <tr>
    		      <td style="text-align:center;">
    				<tr>
    					<td width="300px" height="20px">$data['footer'];?></td>
                                            <td width="300px" height="20px">$data['abonne'];?></td>
    				</tr>
    			</td>
    		</tr>
              </table>
        </body>
    </html>
    Et un lien pour exécuter le fichier de traitement : envoi_mail.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div>
         <a href="envoi_mail.php">Envoi newsletter</a>
    </div>
    C'est un exemple de code pour vous illustrer la façon dont j'ai procédé. Le bout de code php qui s'affiche dans le mail est celui se trouvant dans le fichier newsletter.php. Le fichier envoi_mail.php fait le traitement de l'envoi et il n'y a pas de soucis à ce niveau puisque l'envoie de mail marche bien.

    Cdlt,

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le problème que tu as, c'est que ton template doit faire du traitement (en l'occurrence la récupération de données en base). Ce n'est pas du HTML pur que tu peux te contenter de coller.

    Si tu veux conserver ton fichier tel qu'il est, il doit être possible de faire quelque chose avec un include et un buffer de sortie. Quelque chose de cette veine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $text_mail = "";
     
    // on démarre le buffer
    ob_start();
     
    // on lit le fichier newsletter.php
    include("newsletter.php");
     
    // on récupère la sortie de newsletter.php
    $text_mail = ob_get_contents();
     
    // on ferme le buffer
    ob_end_clean();
    Et ensuite tu utilises ta variable $txt_mail comme contenu du mail.

    Au passage : pense à sortir de la boucle sur les destinataires tout ce qui n'est pas dépendant de l'expéditeur, histoire d'éviter de faire des choses inutiles.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Points : 50
    Points
    50
    Par défaut
    Ok merci !

    Je ferai le test et je te dirai quoi après.

    Cdlt,

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Points : 50
    Points
    50
    Par défaut
    Re,

    C'est parfait !
    Ça marche très bien.

    Merci encore

    A bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Newsletter - Envoi simple à une liste de diffusion
    Par Erwan31 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 16/09/2011, 15h28
  2. [Mail] Envoi de mails d'une liste de diffusion
    Par johndoll dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 12h20
  3. [Mail] Liste de diffusion en PHP
    Par Thierry8 dans le forum Langage
    Réponses: 4
    Dernier message: 04/11/2005, 10h36
  4. [Info] Outil de liste de diffusion
    Par Emilie MARQUOIS-OGEZ dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 06/10/2005, 15h00
  5. [javamail] liste de diffusion
    Par agougeon dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 29/05/2005, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo