PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 14-06-2011 11:28:11

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

Envoyer un mail en HTML avec PHP

Bonjour,

J'ai un formulaire d'envoi de mail qui utilise un éditeur wysiwyg pour le textarea afin d'envoyer des mails en HTML.
Le problème est que je reçois les mails en texte normal...
Je pense que ça vient des headers mais je ne vois pas trop oùu cà cloche.
C'est  un script que j'ai récupéré et adapté.

Voici la partie d'envoi du mail:

<?php
$rep = "upload/";
$taillemax = 1024000;
$pseudo=ucwords($_POST['pseudo']);          // valeur pseudo emetteur
$emetteur=$_POST['email'];            // valeur email emetteur
$objet=stripslashes(ucfirst($_POST['objet']));            // valeur objet du message
$message=nl2br(stripslashes($_POST['message']));        // valeur du message lui meme
$regex = '[-a-zA-Z0-9!#$%&\'*+\\/=?^_`{|}~]';
$regex_mail = "/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i";

        if (!ereg($regex,$pseudo)){
                die('Pseudo non conforme');
                }
        elseif (!ereg($regex,$objet)){
        die('Objet non conforme');
                }
        elseif (!ereg($regex,$message)){
                die('Message non conforme');
                }
        elseif (!preg_match($regex_mail, $emetteur)){
                die('Email non conforme');
                }

$piecejointe = "";
if(!$erreur && strlen($_FILES['fichier']['name'])) {
        $fichier = $_FILES['fichier'];
        $name = $fichier['name'];
        $temp = $fichier['tmp_name'];
        $size = $fichier['size'];
        # séquence de caractères
  $destination = $rep.$name;
  # upload du fichier sur le serveur
  if($size > $taillemax)
    $erreur = "Taille du fichier $name > ".(int)($taillemax/1024)." Ko";
  elseif(!@is_uploaded_file($temp))
    $erreur = "Téléchargement du fichier $name impossible";
  elseif(!@move_uploaded_file($temp, $destination))
    $erreur = "Problème de transfert du fichier $name";
  else {

//===== On vérifie maintenant le type de fichier
  if(!function_exists('mime_content_type')) {
    function mime_content_type($fichier) {
    # ajouter autant de combinaisons que souhaitées
    $mime = array(
                '.gif'  => 'image/gif',
                '.jpg'  => 'image/jpeg',
                '.jpeg' => 'image/jpeg',
                '.jpe'  => 'image/jpeg',
                '.bmp'  => 'image/bmp',
                '.png'  => 'image/png',
                '.tif'  => 'image/tiff',
                '.tiff' => 'image/tiff',
                '.swf'  => 'application/x-shockwave-flash',
                '.doc'  => 'application/msword',
                '.xls'  => 'application/vnd.ms-excel',
                '.ppt'  => 'application/vnd.ms-powerpoint',
                '.pdf'  => 'application/pdf',
                '.ps'   => 'application/postscript',
                '.eps'  => 'application/postscript',
                '.rtf'  => 'application/rtf',
                '.zip'  => 'application/zip',
                '.rar'  => 'application/rar',
                '.html' => 'text/html',
                '.htm'  => 'text/html',
                '.txt'  => 'text/plain',
    );
  # par défaut
  if(!$type = $mime[strrchr($fichier,'.')]) $type = "application/octet-stream";
  return $type;
  }
}
$mimetype = mime_content_type($destination);
# lecture et conversion du fichier
if($openf = @fopen($destination, "rb")) {
$fichier = fread($openf, filesize($destination));
@fclose($openf);
# encodage norme RFC 2045
$piecejointe = chunk_split(base64_encode($fichier));
  } else {
    $erreur = "Problème de lecture du fichier $name";
  }
}
}
//===== Ajout du message
if(!$erreur) {
  $message_final = "";
  $message_final .= strip_tags($message);        // valeur du message lui meme
  # en-têtes
  $headers = "MIME-Version: 1.0\n";
  $headers .= 'From: XXXXX <'.$emetteur.'>'."\r\n";
  # si pièce jointe on ajoute l'en-tête spécifique avec séparateurs
 
if(strlen($piecejointe)) {
         $boundary = md5(uniqid(rand())); // séparateur
         $headers .= 'Content-Type: multipart/mixed;'."\n".' boundary="'.$boundary.'"';
         $message_final =
            "This is a multi-part message in MIME format.\n--$boundary\n".
            "Content-Type: [b][color=#e3281c]text/html[/color][/b]; charset=ISO-8859-1\r\n\n".
            "Content-Transfer-Encoding: 8bit\r\n\n".
            "$message_final\n\n--$boundary\n".
            "Content-Type: $mimetype; name=\"$name\"\r\n".
            "Content-Transfer-Encoding: base64\r\n".
            "Content-Disposition: attachment; filename=\"$name\"\r\n\n".
            "$piecejointe\n--".
            $boundary."--\n";
      }
    $message_final =stripslashes($message_final);

//===== On récupère les adresses mail dans la BDD
        require_once('config/config.inc.php');
        foreach ($_POST['dest'] as $id_user) {
        $requete = "SELECT Adresse_mail AS email FROM adherents WHERE ID='$id_user'";
        $result=mysql_query($requete) or die('Erreur SQL ! Adherents '.mysql_error());
        while ($destinataire = mysql_fetch_object($result)) {
    if (mail($destinataire->email, $objet, $message_final, $headers)) {
                        $msg = 'Le '.date("d-m-Y").' à '.date("H:i").'. Expéditeur: '.$emetteur.' -> Envoi réussi à '.$destinataire->email.'. Pièce jointe: '.$name.'';
                        }else{
                        $msg = '*** ECHEC Le '.date("d-m-Y").' à '.date("H:i").'. Expéditeur: '.$emetteur.' -> Envoi vers '.$destinataire->email.'. Pièce jointe: '.$name.'';
                }
                $etat = "mail.txt";
                $inF = fopen($etat,"a");
                fputs($inF,$msg."\n");
                fclose($inF);

//      @unlink($destination);                                  // suppression de la pièce jointe ou non du repertoire d'upload
            }
                }
?>

Petite précision, si je text/plain, les sauts de ligne sont bien respectés. Mais si je mets text/html, tout s'affiche sur la même ligne.
Quelqu'un a une idée svp ?

Hors ligne

#2 14-06-2011 11:36:13

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Envoyer un mail en HTML avec PHP

mettre çà ou tu peux wink
$headers .='Content-Type: text/html'."\n";

a++

Hors ligne

#3 14-06-2011 12:06:51

Sq78
Membre
Inscription : 13-05-2009
Messages : 47

Re : Envoyer un mail en HTML avec PHP

C'est mis (en ligne 99)
J'avais voulu le mettre en rouge dans le forum, mais ça a merdé

Hors ligne

Pied de page des forums