Caractére spéciaux et envoie mail php

Répondre
missloo
le 13/10/2009 à 23:09
missloo
bonjour

j'ai crée un fichier php qui renvoi un mail automatique a l'utilisateur.
il est formaté en html.
j'ai un problème avec l'encodage des caractère spéciaux.
j'ai compris que le problème venait du choix du charset.
j'ai donc changer
$message .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n";
par
$message .= "Content-Type: text/html; charset=\"utf-8\"\n";
ce qui a résolu le problème pour mon texte mais pas pour le texte qui s'affiche dynamiquement par le biais de variable

pour plus de compréhension voici mon code php
<?php
// on génère une frontière
$boundary = '-----=' . md5( uniqid ( rand() ) );
// on génère un identifiant aléatoire pour le fichier
$file_id = md5( uniqid ( rand() ) ) . $_SERVER['SERVER_NAME'];

// on va maintenant lire le fichier et l'encoder
$path = 'bonbienvenu.jpg'; // chemin vers le fichier
$fp = fopen($path, 'rb');
$content = fread($fp, filesize($path));
fclose($fp);
$content_encode = chunk_split(base64_encode($content));

$headers = "From: \"Passdouceur\"<totot@mdr.com>\n";
$headers .= "X-Priority: 1\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/related; boundary=\"$boundary\"";

$sujet = "Offre découverte PASSDOUCEUR ";

$message = 'This is a multi-part message in MIME format.'."\n\n";
$message .= "--" . $boundary . "\n";
$message .= "Content-Type: text/html; charset=\"utf-8\"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= "<html><body>Madame ".$nom." ".$prenom.", <br><br>";
$message .= "Veuillez trouvez ci-joint le bon de réduction à valoir sur votre premier rendez vous.<br>";
$message .= "Il est valable sur l'ensemble de la gamme Passdouceur<br>";
$message .= "Alors n'attendez plus <br>";
$message .= "Prenez rendez-vous dés à présent au 06 00 00 00 00 <br>";
$message .= "<br>@+<br><br>";
$message .= "<img src=\"cid:$file_id\" alt=\"le fichier demandé\"><br>";
$message .= "\n\n";
$message .= "--" . $boundary . "\n";
$message .= "Content-Type: image/jpg; name=\"bonbienvenu.jpg\"\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "Content-ID: <$file_id>\n\n";
$message .= $content_encode . "\n";
$message .= "\n\n";
$message .= "--" . $boundary . "--\n";

mail($mail , $sujet , $message, $headers);
?>


voici le mail reçu avec le ç noté �

Madame Delaville fran�oise,

Veuillez trouvez ci-joint le bon de réduction à valoir sur votre premier rendez vous.
Il est valable sur l'ensemble de la gamme Passdouceur
Alors n'attendez plus
Prenez rendez-vous dés à présent au 06 00 00 00 00

@+

quelle solution pour que tout soit affiché correctement

merci de vos réponses
LA GLOBULE
le 13/10/2009 à 23:17
LA GLOBULE
Surement que tes variables ne contiennent pas des chaines en UTF-8, je ne vois que ca.

Donc soit tu enregistres ton fichier .php au format ISO-8859-1 et tu mets un content-type ISO-8859-1 dans l'entete du mail, soit tu fixes le problème des variables qui ne sont pas UTF-8 (tu peux utiliser ce que j'appelle un pansement en utilisant utf8_encode ou utf8_decode, mais dans la théorie, ton site doit toujours utiliser le meme charset, ou du moins, il te faut arriver à controler ce charset, ce n'est pas logique de devoir utiliser ces fonctions sans raison apparente).
missloo
le 13/10/2009 à 23:42
missloo
merci pour réponse

je suis vraiment novice en php
je navigue à vue smiley

la première option "mettre un content-type ISO-8859-1 dans l'entete du mail"
je veux bien le probléme c'est que je ne sais pas comment intégré ça car dans mon code j'ai déjà un Content-Type: multipart/related; boundary=\"$boundary\

qu'est ce qu'il faut que j'écrive exactement.

c'est un peu confus pour moi

les variables $nom et $prenom proviennent d'un fichier flash ou se trouve un formulaire qui envois ces variables au fichier php.

merci d'éclairer ma lanterne.
je suis vraiment en limite de compétence
LA GLOBULE
le 14/10/2009 à 01:05
LA GLOBULE
On s'en moque du multipart, l'important, c'est l'encodage de ta partie html.

Tu dis toi même avoir fais :
j'ai donc changer
$message .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n";
par
$message .= "Content-Type: text/html; charset=\"utf-8\"\n";

Donc si tu optes pour la première solution, ben remet le ISO-8859-1 ici et sauvegarde ton .php en ISO-8859-1 (un bon éditeur de texte doit te permettre de choisir l'encodage utilisé pour le fichier que tu écris).
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours