Problème script php (newsletter)

Résolu
Bonjour,

Sa fait plusieurs heure que j'éssaye d'installer une newsletter sur mon site web et mon seul problème est dans ce script ,
celui-ci doit envoyé le message que j'ai écrit sur la page précédente aux e-mails de ceux qui se sont inscrits (dans ma base de donnée)..
L'envoi du mail fonctionne, je reçois l'objet, nom, l'e-mail,.. MAIS je ne reçois pas le message.
Voici le script:

<?php
$message = ($_POST['mess']);
include("parametres.php");
$connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
$sql = "SELECT * FROM newsletter";
$result = mysql_db_query($database , $sql , $connexion);

while($resultat = mysql_fetch_array($result))

{ $objet = "NewsLetter";

$message = "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=iso-8859-1\n";
$headers .= "From: $nom_du_site <$votreemail>\n";
$headers .= "X-Sender: <$votreemail>\n";
$headers .= "X-Mailer: PHP\n";
$headers .= "Return-Path: <$votreemail>\n";

mail("$resultat[email]", $objet, "$message", $headers);
}
?>

Merci d'avance pour votre aide!
Configuration: Windows XP
Internet Explorer 7.0

14 réponses

  1. Contributeur
    Salut.

    Es-tu sûr de ta valeur $_POST['mess'] ? Est-elle bien récupérée ?

    D'autre part, tu fais
    $message = ($_POST['mess']);
    et ensuite
     $message = "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";
    La valeur de $message sera donc cette dernière.... Mets .= si tu veux concaténer.

    Et fais plutôt ceci (ça ne devrait rien changer, mais c'est plus clair à mon sens):
    mail($resultat['email'], $objet, $message, $headers); 
    M'enfin c'est bizarre tout de même...

    T'as testé un envoi tout bête (non paramétré) avec la fonction mail() pour voir si tu recevais tout ? Genre
    <?php
    $dest="toto@toto.com";
    $objet = "NewsLetter";
    $message = "ton message";
    $headers ='From: "nom"<adresse@fai.fr>'."\n"; 
    
    mail($dest,$objet,$message,$headers);
    ?>
    @+
    1. Contributeur
      De mon côté, j'ai testé ceci :
      <?php
      $message = "message";
      $objet = "Teest";
      
      $message .= "<br><br><br><a href=http://www.site.com/desabonnement.php?email=mail@mail.com>Cliquer ici pour se désabonner</a>";
      
      $headers .= "MIME-Version: 1.0\r\n";
      $headers .= "Content-Type: text/html; charset=iso-8859-1\n";
      $headers .= "From: moi<mon_mail>\n";
      $headers .= "X-Sender: <mon_mail>\n";
      $headers .= "X-Mailer: PHP\n";
      $headers .= "Return-Path: <mon_mail>\n";
      
      mail("mon_mail", $objet, $message, $headers);
      ?> 
      L'envoi s'est bien passé, et j'ai tout reçu.

      Conclusion : vérifie bien la récupération des valeurs dans tes variables php...
      1. oui j'ai testé aussi et j'ai bien reçu.. Enfin c'est peut-être moi qui comprend pas..

        Voila la page précédente avec le formulaire qui contient le message du mail:

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
        <html>
        <head>

        <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
        <title>nw</title>

        </head>

        <body>

        <form method="post" action="envoixxx.php" name="newsletter"><b>Votre message en HTML ou en texte
        brut :<br>

        <textarea cols="40" rows="25" name="mess"></textarea><br>

        <input name="Submit" value="Envoyer" type="submit"></b></form>

        </body>
        </html>
        1. Contributeur
          Mais tu n'as rien du tout qui s'affiche dans le message ?

          Et en mettant $message = ($_POST['mess']); dans le while ? ...

          @+
      2. si dans le message il y a quand mm le liens><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";

        tu peu me dire comment tu mets $message = ($_POST['mess']); dans le while

        jsuis pas sure
        while($resultat = mysql_fetch_array($result), $message = ($_POST['mess']))

        merci
        1. Contributeur
          Ah oui nan, ce que je veux dire, c'est $message = ($_POST['mess']); dans ta boucle while (après l'accolade quoi).

          Mais avant ça, as-tu bien essayé de faire avec .=
                   |
                   V
          $message .= "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>"; 
          Ta valeur $_POST['mess'] est-elle bien récupérée ?

          @+
        2. @dcanlbjr
          je suis stagiare jé du mal à m'on sortir de php
          mon titeur de stage ma demandé de faire un désabonement de emailing!!!
          auriez vs la gentillesse de m'aider a construire mon code ou a me corigé mon code
          codialement
      3. Bonjour,

        pourquoi mets tu tout ça dans la boucle while

        <?php
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=iso-8859-1\n";
        $headers .= "From: $nom_du_site <$votreemail>\n";
        $headers .= "X-Sender: <$votreemail>\n";
        $headers .= "X-Mailer: PHP\n";
        $headers .= "Return-Path: <$votreemail>\n";
        $objet = "NewsLetter";
        
        include("parametres.php");
        $connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
        $sql = "SELECT * FROM newsletter";
        $result = mysql_db_query($database , $sql , $connexion);
        $n=0
        while($resultat = mysql_fetch_array($result)){ 
        $message = ($_POST['mess']);
        $message .= "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";
        $env_mail=mail("$resultat[email]", $objet, "$message", $headers);
        if($env_mail){$n++} // si env ok on incremente le compteur
        }
        
        if($n>0){
        	echo "Newletter envoy&eacute;e a $n correspondants";
        }else{
        	echo "Newletter non envoy&eacute;e";
        }
        ?>
        
        1. Contributeur
          Oui, effectivement...

          Mettre l'include au début tout de même... J'imagine que $nom_du_site et $votreemail sont dans parametres.php.

          @+
      4. Bonjour,

        voila j'ai éssayé ce script mais le problème maintenant, c'est quand j'envoie sa me met sa:
        Parse error: syntax error, unexpected T_WHILE in /home/web/clients/jerew.org/www/envoixxx.php on line 16
        Que faire?

        <?php
        include("parametres.php");

        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=iso-8859-1\n";
        $headers .= "From: $nom_du_site <$votreemail>\n";
        $headers .= "X-Sender: <$votreemail>\n";
        $headers .= "X-Mailer: PHP\n";
        $headers .= "Return-Path: <$votreemail>\n";
        $objet = "NewsLetter";

        $connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
        $sql = "SELECT * FROM newsletter";
        $result = mysql_db_query($database , $sql , $connexion);
        $n=0
        while($resultat = mysql_fetch_array($result)){
        $message = ($_POST['mess']);
        $message .= "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";
        $env_mail=mail("$resultat[email]", $objet, "$message", $headers);
        if($env_mail){$n++} // si env ok on incremente le compteur
        }

        if($n>0){
        echo "Newletter envoyée a $n correspondants";
        }else{
        echo "Newletter non envoyée";
        }
        ?>
        1. Contributeur
          Mets un ; après $n=0 ! ;-)
      5. Pour le include, pas de pb tu peux le mettre au début, pourvu qu'il soit avant l'utilisation des variables qu'il initialise
        as tu bien remplacé les <$votreemail> par ton adresse mail sans les < > ?

        essayes comme ça:

        <?php
        include("parametres.php");
        
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=iso-8859-1\n";
        $headers .= "From: $nom_du_site <$votreemail>\n";
        $headers .= "X-Sender: <$votreemail>\n";
        $headers .= "X-Mailer: PHP\n";
        $headers .= "Return-Path: <$votreemail>\n";
        $objet = "NewsLetter";
        
        $connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
        $sql = "SELECT * FROM newsletter";
        $result = mysql_db_query($database , $sql , $connexion);
        $n=0
        while($resultat = mysql_fetch_array($result)){
        	$message = $_POST['mess'];
        	$message .= "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";
        	$env_mail=mail($resultat[email], $objet, $message, $headers);
        	if($env_mail){// si env ok on incremente le compteur
        		$n++
        	} 
        }
        //partie que tu pourras enlever quand ça marchera, si tu veux ?
        if($n>0){
        echo "Newletter envoyée a $n correspondants";
        }else{
        echo "Newletter non envoyée";
        }
        ?>
        
        1. voila j'ai rééssayé et maintenant sa me met ..

          Parse error: syntax error, unexpected '}' in /home/web/clients/jew.org/www/envoixxx.php on line 20
          1. Je crois que e problème viens de cette line..

            if($env_mail){$n++} // si env ok on incremente le compteur
            1. voila sa marche, j'ai juste mi sa:

              <?php
              include("parametres.php");

              $headers .= "MIME-Version: 1.0\r\n";
              $headers .= "Content-Type: text/html; charset=iso-8859-1\n";
              $headers .= "From: $nom_du_site <$votreemail>\n";
              $headers .= "X-Sender: <$votreemail>\n";
              $headers .= "X-Mailer: PHP\n";
              $headers .= "Return-Path: <$votreemail>\n";
              $objet = "NewsLetter";

              $connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
              $sql = "SELECT * FROM newsletter";
              $result = mysql_db_query($database , $sql , $connexion);
              $n=0;
              while($resultat = mysql_fetch_array($result)){
              $message = $_POST['mess'];
              $message .= "<br><br><br><a href=$site/desabonnement.php?email=$resultat[email]>Cliquer ici pour se désabonner</a>";
              $env_mail=mail($resultat[email], $objet, $message, $headers);
              }
              ?>

              Evidament j'ai pas l'echo et le nmbre d'envoi mais tant que sa fonctionne!

              Merci pour votre aide :)
              1. Désolé, une petite faute de frappe, il manquait le ; après $n++

                // si env ok on incremente le compteur
                if($env_mail){
                		$n++;
                	} 
                


                Si tu veux essayer, tu le remet et tu auras le résultat de tes envois;
                1. rebonjour et bonne année!

                  j'ai encore un petit problème avec cette newsletter.. ceci est le script de désinscription, alors voila, j'aimerais que lorque l'on tape par exmple l'url suivante:
                  http://xxxxxxx.org/desabonnement.php?email=jere@web.com
                  que l'adresse e-mail soit supprimé de ma base.

                  <?
                  include("parametres.php");
                  $connexion = mysql_connect("$chemin_db" , "$login" , "$pass");
                  mysql_select_db($database , $connexion);
                  $sql = "DELETE FROM newsletter WHERE email='$email'";
                  mysql_query($sql);
                  mysql_close($connexion);
                  ?>
                  L'adresse e-mail <?echo $email?> a été supprimée.

                  quelqu'un peu me dire l'erreur de ce script svp?
                  1. Contributeur
                    A la place de $email, utilise $_GET['email'] et mets un ; pour finir ton echo à la fin.
                    $sql = "DELETE FROM newsletter WHERE email=" . $_GET['email']; 
                    
                    L'adresse e-mail <?php echo $_GET['email']; ?> a été supprimée. 

                    De plus, il est préférable d'utiliser <?php ?> plutôt que <? ?>, la deuxième méthode n'étant plus celle utilisée par défaut dans les versions les plus récentes de php.

                    @+