probleme mail saut de ligne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme mail saut de ligne

Re: probleme mail saut de ligne

par itachi15 » 28 mars 2012, 09:20

Bonjour à tous,

merci pour les modifications pour le code et la coquille laissé sur le test du pass_alerte qui effectivement n'a rien à faire ici.

J'ai trouvé la solution. Mon lien concaténé est construit avec \n à la fin. Quand je sorts de ma boucle, je passe nl2br sur mon lien concaténé et tout roule. Je retrouve bien dans mon corps de mail la totalité des résultats attendus avec le saut de ligne. Pour ce qui est des balises <html><body> etc..., je vais les mettres, je voulais juste régler ce problème avant.

Merci encore.

Re: probleme mail saut de ligne

par Mazarini » 28 mars 2012, 09:04

Tout d'abord, il n'y a pas de balises html, head et body. On peut supposer que ca marche mieux avec.

Ensuite, il faudrait que tu vérifie le mail envoyé en regardant le source du mail avec ton client mail. Ca te permettrait de voir si ce que tu envoies est bien conforme à ce que tu veux envoyer et si le problème d'affichage n'est pas un problème lié à ton client.

Re: probleme mail saut de ligne

par albat » 28 mars 2012, 08:54

Tout d'abord, j'ai réécrit ton code de manière un peu plus lisible :
while ($row_docs_echeance = mysql_fetch_array($result_docs_echeance))
      { // Récupérations des valeurs
        $fichedocid = $row_docs_echeance['fichedocid'];
        $titre = tronque($row_docs_echeance['titre']);
        // Lien dans le mail
        // Avec    , l'affichage est bon, mais pas à la réception du message dans Thunderbird.
        // Par contre avec \n, rien ne va à la ligne mais j'ai tout les résultats.   
        $lien .= $titre.'-<b>'.$fichedocid.'</b>';
      }

// Envois du mail au client extérieur
$sujet = 'Alerte documents arrivant à échéance';
$from  = "From: ".$email_admin."\n"
       . "MIME-version: 1.0\n"
       . "Content-type: text/html; charset=ISO-8859-1\n"
       . "Return-Path: ".$email_admin."\n"
       . "Reply-To: ".$email_admin."\n";
$corps = '<link rel=stylesheet href="http://'.$serveur.'/css/mail.css" type=text/css>
          <table style="width:760px;border:0">
          <tr><td><img src="http://'.$serveur.'/images/new_entete2.jpg" alt=""></td></tr>
          <tr><td><span class="titre_cellule">&nbsp;&nbsp;<b>Voici la liste du ou des document(s)
                                              qui vont arriver à échéance pour le mois de : '.$mois_encours.'</b>'.$lien.'</span>
                  <span class="avertissement">&nbsp;&nbsp;Merci de vous connecter sur le portail,
                                              et d\'assurer le cycle de vie de ces documents.</span></td></tr>
          </table><br>';
print $corps."\n";

// J'affiche le corps du message dans le navigateur, tout est Ok !
if (mail($email_admin,mb_encode_mimeheader($sujet,"ISO-8859-1","Q"),$corps,$from))
   { if ($pass_alerte != 1)
        { ecrire_log('Document échéance','Alerte sur les documents arrivant à échéance envoyés avec succés');
          $alerte .= '&nbsp;&nbsp;Alerte sur les documents arrivant à échéance envoyés avec succés.';
        }
        else
        { if ($pass_alerte != 1)
             { ecrire_log('Document échéance','Alerte sur les documents arrivant à échéance non envoyés.');
               $alerte .= '&nbsp;&nbsp;Alerte sur les documents arrivant à échéance non envoyés.';
        }
   }
J'ai supprimé qqs lignes totalement inutiles, réécrit les balises en minuscules,
extrait les variables PHP des chaines de caractères HTML, etc.

Cela m'a permis de voir, pour commencer, que l'imbrication de tes tests en bas de ton script est incorrecte.
En effet, tu effectues un test sur la variable $pass_alert en vérifiant que sa valeur est différente de 1.
- si cette condition est vérifiée ($pass_alerte != 1), tu affiches "Envoyé avec succès"
- si cette condition n'est pas vérifiée ($pass_alerte = 1), tu retestes $pass_alert !
Y a pas comme un souci ? ;)

probleme mail saut de ligne

par itachi15 » 28 mars 2012, 08:24

Bonjour,

je rencontre un problème sur l'envoi d'un mail d'alerte. Je récupére toutes les fiches d'une base qui sont comprisent dans un intervalle de date. Je concatène chaque résultat dans une variable. Ensuite, j'envois mon mail au format HTML. Lors de la concatènation, si je mets "\n" à la fin, à la réception de mon message dans Thunderbird, j'ai bien 19 résultats (nombre attendus). Par contre, si je mets "<br />" à la fin de la concaténation, certains résultats ne sont plus présents dans le coprs du message, je me retrouve avec 9 ou 10 résultats ... Je n'y comprends rien.

Voici mon code :

Code : Tout sélectionner

while($row_docs_echeance = mysql_fetch_array($result_docs_echeance)) { // Récupérations des valeurs $fichedocid = $row_docs_echeance['fichedocid']; $titre = tronque($row_docs_echeance['titre']); // Lien dans le mail // Avec <br />, l'affichage est bon, mais pas à la réception du message dans Thunderbird. Par contre avec \n, rien ne va à la ligne mais j'ai tout les résultats. $lien .= $titre."-<b>". $fichedocid ."</b><br />"; } // Envois du mail au client extérieur $sujet = "Alerte documents arrivant à échéance"; $from = "From:$email_admin\n"; $from .= "MIME-version: 1.0\n"; $from .= "Content-type: text/html; charset=ISO-8859-1\n"; $from .= "Return-Path: $email_admin\n"; $from .= "Reply-To: $email_admin\n"; $corps = "<link rel=stylesheet href='http://$serveur/css/mail.css' type=text/css>\n"; $corps .="<TABLE WIDTH=760 BORDER=0 CELLPADDING=0 CELLSPACING=0> <TR> <TD> <IMG SRC='http://$serveur/images/new_entete2.jpg' BORDER=0 ALT=''> </td> </TR> <TR> <TD> &nbsp; </td> </TR> <tr> <td> <span class='titre_cellule'> &nbsp;&nbsp;<b>Voici la liste du ou des document(s) qui vont arriver à échéance pour le mois de : $mois_encours</b><br /> $lien </span> <span class='avertissement'> <br />&nbsp;&nbsp;Merci de vous connecter sur le portail, et d'assurer le cycle de vie de ces documents.<br /> </span> </td> </tr> <TR> <TD> &nbsp; </td> </TR> </TABLE> <br>"; print $corps."<br />"; // J'affiche le corps du message dans le navigateur, tout est Ok ! if (mail($email_admin,mb_encode_mimeheader($sujet,"ISO-8859-1","Q"),$corps,$from)) { if ($pass_alerte != 1) { ecrire_log("Document échéance","Alerte sur les documents arrivant à échéance envoyés avec succés"); $alerte .= "&nbsp;&nbsp;Alerte sur les documents arrivant à échéance envoyés avec succés.<br />"; } } else { if ($pass_alerte != 1) { ecrire_log("Document échéance","Alerte sur les documents arrivant à échéance non envoyés."); $alerte .= "&nbsp;&nbsp;Alerte sur les documents arrivant à échéance non envoyés.<br />"; } }
Si vous avez une idée, je suis preneur car je sèche complétement. J'ai essayé différent encodage, ça ne change rien. Un collègue dispose d'une autre version de thunderbird, ça fait pareil.
Merci.