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. 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.

      @+
  2. 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. 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. Je crois que e problème viens de cette line..

        if($env_mail){$n++} // si env ok on incremente le compteur
        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. 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. 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 ! ;-)
            2. 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.

                @+
            3. 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
            4. 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 ? ...

                @+
            5. 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. 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);
                ?>
                @+