Page 1 sur 1

Pourquoi ma newsletter n'envoie qu'en html?

Posté : 22 août 2006, 16:10
par towogy
Hello
J'ai fait une newsletter basée sur une base de données dont un champs de ma table newsletter est format (html ou texte).
Mais je ne sais pour quelle raison, la newsletter n'envoie qu'en html alors que je fais un test sur le $this->format ... je m'en sors plus ..
Help?
function envoimail($contenu){

  $req="select * from newsletter where idEmail='{$this->idEmail}'";
    $connexion=connexionBD("mgotowy_bd");
    $res=mysql_query($req,$connexion) or die (mysql_error());
    $ligne=mysql_fetch_object($res);

    $this->idEmail=$ligne->idEmail;
    $this->format=$ligne->format;


   if($this->format=="html"){
  $msg = '';
  if(($_POST['contenu'])) {
  
      $requete= "SELECT email FROM newsletter where statut='inscrit' and format='html'";
      $connexion = connexionBD("mgotowy_bd");
      $result = mysql_query($requete, $connexion) or die(mysql_error());
      $bcc = '';

      while($data = mysql_fetch_array($result)) $bcc .= $data['email'].',';
      var_dump($bcc);


       $bcc = substr($bcc,0,strlen($bcc)-1); //on supprime la dernière virgule.
       $from_email  = "[email protected]";// adresse du cinéma
       $to = $this->email;
       
       $entetemail  = "From: $from_email \n"; // Adresse expéditeur
       $entetemail .= "Cc: \n";
       $entetemail .= "Bcc: {$bcc}\n"; // Copies cachées
       $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
       $entetemail .= "MIME-Version: 1.0 \n";


       $entetemail .="Content-Type: text/html; charset=iso-8859-1 \n";
       $entetemail .= "Content-Transfer-Encoding: 8bit \n";
       
       $corps=$_POST['message'];


       if (($_POST['contenu']) && $_POST['contenu'] =='ouiContenu') {
       $corps.=$contenu;  }
        if (($_POST['contenu']) && $_POST['contenu'] =='nonContenu') {
          $corps.="";}

       //var_dump($cocheContenu);

       mail($to,$_POST['subject'],$corps, $entetemail);
       $msg = 'newsletter envoyée';
 } }
 
 
 

 if($this->format=="texte"){
  $msg = '';
  if(($_POST['contenu'])) {

      $requete= "SELECT email FROM newsletter where statut='inscrit' and format='texte'";
      $connexion = connexionBD("mgotowy_bd");
      $result = mysql_query($requete, $connexion) or die(mysql_error());
      $bcc = '';

      while($data = mysql_fetch_array($result)) $bcc .= $data['email'].',';
      var_dump($bcc);


       $bcc = substr($bcc,0,strlen($bcc)-1); //on supprime la dernière virgule.
       $from_email  = "[email protected]";// adresse du cinéma
       $to = $this->email;

       $entetemail  = "From: $from_email \n"; // Adresse expéditeur
       $entetemail .= "Cc: \n";
       $entetemail .= "Bcc: {$bcc}\n"; // Copies cachées
       $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
       $entetemail .= "MIME-Version: 1.0 \n";


       $entetemail .="Content-Type: text/plain; charset=iso-8859-1 \n";
       $entetemail .= "Content-Transfer-Encoding: 8bit \n";

       $corps=$_POST['message'];


       if (($_POST['contenu']) && $_POST['contenu'] =='ouiContenu') {
       $corps.=$contenu;  }
        if (($_POST['contenu']) && $_POST['contenu'] =='nonContenu') {
          $corps.="";}

       //var_dump($cocheContenu);

       mail($to,$_POST['subject'],$corps, $entetemail);
       $msg = 'newsletter envoyée';
 } }
 
}
C'est assez long, je sais ...
Mais si qqln a une idée, ce serait sympathique =)[/code]

Posté : 22 août 2006, 16:20
par Ryle
Question bête mais... quelle est la valeur de $ligne->format ?
et est-ce que tu rentres dans le if($this->format=="texte") ?

Posté : 22 août 2006, 16:27
par towogy
Bah c justement ça le probleme en fait, le $this->format prend comme valeur que "html" (la valeur du format pour le premier mail enregistré), donc du coup, il n'entre que dans le if qui verifie si le format est bien "html".
*prise de tete*
aaaahhhhhhhhh, je veux une reponse, pliz ^^

Posté : 22 août 2006, 16:37
par Ryle
la valeur du format pour le premier mail enregistré
C'est normal, tu n'interroges que la première ligne de résultat retourné par ta requête :
$ligne=mysql_fetch_object($res);
Donc si le premier est un mail html, le mail que tu vas envoyer sera forcément au format html... Il ne te manquerait pas une boucle pour traiter les suivants ? :)
while ($ligne=mysql_fetch_object($res)) { 
  if(...) { //mail html 
    ...
  }
  else { //mail txt
    ....
  }
}
Ou peut être est-ce dans ta requête que tu as un soucis et qu'il retourne tout le temps le même mail ?
fais un echo de $req au début de ton code pour voir la tête du sql généré et vérifier qu'il correspond bien à ce que tu attends :)

Posté : 22 août 2006, 16:50
par towogy
ouiiiii, c'etait ça mais bien sur.
J'avais trouvé avant de regarder ta réponse ... sisi j't'assure =)
Merci pour l'aide en tous cas, ça fait plaisir ^^