Deux petites question avec des mails en PHP

Eléphant du PHP | 109 Messages

23 avr. 2010, 17:50

Bonjour à tous,

j'ai deux petites questions à vous soumettre concernant d'une part, les images dans les mails et d'autre part, des caractères du style "\r\n" qui se mettent dans les mail envoyés.

Première question :

J'ai lu qu'il y avait deux solution pour mettre des images dans un mail envoyer en PHP :
  • Joindre l'image au mail
  • Mettre un lien absolu
je souhaite, dans mon cas, la deuxième solution.
Lorsque je rédige mon mail dans le formulaire fait à cet effet, je met la balise <img> avec un lien absolu.
Problème : l'image ne s'affiche pas or, si j'ulitise d'autre balises HTML comme <u> ou <p> ça marche sans souci. :(


Deuxième question :

Lorsque j'envoie un mail toujours avec le même formulaire, des "\r" et des "\n" s'ajoutent clandestinement au mail.
Exemple de mail reçu :
\r\n
\r\nHello world !\r\n
Comment faire pour les enlever?

Merci d'avance à tous et à toutes ;)


Compléments :

le formulaire ainsi que le script d'envoi du mail se trouve sur la même page, la voici :
<?php
if(!isset($_POST['title']) || !isset($_POST['contenu']))
{ 
    ?>
    <form action="includes/newsletter.php" method="post">
    Titre : <br><input type="text" size="40" name="title">
    <br>
    <br>
    Le contenu : <br>
    <textarea cols="90" rows="20" name="contenu"></textarea><br>
    <input type="reset" value="Effacer tout"> &nbsp; <input type="submit" value="Envoyer">
    </form>
    <?php
}
elseif( isset($_POST['title']) && isset($_POST['contenu']))
{
     include_once("fonction.inc.php");

     connect();

     $titre = mysql_real_escape_string(stripslashes($_POST['title']));
     $contenu = wordwrap(mysql_real_escape_string(stripslashes($_POST['contenu'])), 70);
     $headers = 'From: [email protected]' . "\r\n" .
     'Reply-To: [email protected]' . "\r\n" .
     'X-Mailer: PHP/' . phpversion();
     $headers .= "MIME-Version: 1.0\r\n";
     $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

     $query = mysql_query("SELECT mail FROM ts_newsletters WHERE 1") or exit(mysql_error());
     
     $i = 0;
     while($mail = mysql_fetch_array($query))
     {
           if($i == 0) 
           { 
                $destinataire .= $mail['mail'] . ','; 
           }
           else
           {
                $destinataire .= ' ' . $mail['mail'] . ',';
           }     
            $i++;
     }

     mysql_close();
     

     if(mail($destinataire, $titre, $contenu, $headers))
     {
          redirect('../admin.php?action=mail_ok');
     }
     else
     {
          redirect('error.php?error=unable_send_mail');
     }  
}                   

?>    
    
ANSI <font> <font> <font> <li> <p> <title> Mar I/O .NET

Eléphant du PHP | 109 Messages

24 avr. 2010, 17:35

Bonjour,

je signale que je viens de régler mon problème par moi même. (rien de tel pour ne pas refaire les erreurs :priere: )

Mon problème résidait dans cette ligne :
 $contenu = wordwrap(mysql_real_escape_string(stripslashes($_POST['contenu'])), 70);
La solution :
 $contenu = stripslashes($_POST['contenu']);
Explication :

Ce script était issu de la doc' (http://php.net/manual/fr/function.mail.php) or je ne vois pas l'utilité du wordwrap car j'ai essayé de faire un mail avec des ligne dépassant les 70 caractère et ça n'a posé aucun problème. Donc l'enlever résolvait (je suppose) le problème des image car (je suppose) que la balise <img> faisant plus de 70 caractères était coupée et ne fonctionnait donc pas.

Quant au mysql_real_escape_string, c'est une erreur de ma part. J'ai pris pour habitude de donner un coup de cette fonction sur chaque variable que l'utilisateur envoi alors qu'ici, ce n'était pas nécessaire.

Bref, j'obtiens pour finir le résultat escompté.
Merci quand même à ceux qui auront lu mon post initial. :)
ANSI <font> <font> <font> <li> <p> <title> Mar I/O .NET