Bonjour, je vous soumet une question récurrente sur les forums d'aide PHP ^^

J'ai réalisé un sytème de "breaking news" pour discuter entre admins.
J'utilise la fonction mail de PHP, ça marche en local avec le smtp de mon FAI free, jusque là que du classique.

  • Mes sources PHP sont en utf8.

  • J'encode le subject en CP1252 (recommandé pour lire les € dans le subject)

  • Mes headers fonctionnent et j'envoie le mail en charset utf8;

  • le contenu est placé dans une page HTML pour faire un beau header/footer autour.

  • J'ai un doctype XHTML transitional et un meta charset utf8 dans le <head>

Je n'ai aucun problème avec les messageries hotmail ou gmail, je peux envoyer des caractères spéciaux
dans le sujet et dans le content ( style ???, € Ç,É ou ???????? ), tout fonctionne et s'affiche correctemnt.
Mais j'ai un souci quand je lis mes mails avec windows Mail (Vista):
les caractères accentués spéciaux s'affichent n'importe comment dans le subject et le content:
CNIL N° 696466. En application de la loi n° 78-17 du 6 janvier 1978 ("informatique et libertés"),
s'affiche ainsi:
CNIL N° 696466. En application de la loi n° 78-17 du 6 janvier 1978 ("informatique et libertés"),
Comme si il n'y avait pas d'encodage utf8 vers windows mail ?
Mais si j'écris le même message (style: "test encore ÉÇAF€KOI ??? ????????") depuis gmail ou hotmail vers windows mail , tout s'affiche correctement.
Bref, auriez-vous l'explication et/ou la démarche ultime pour pouvoir envoyer des emails lisibles sous windows mail ?

EDIT: je voulais écrire des caractères spéciaux style coeur, smiley (ALT+1, ALT+2...) ou des caractères thais mais ils ne s'affichent pas bien sur le forum non plus et sous la forme ????? :p

4 réponses


Grafikart
Réponse acceptée

Test avec ce header :
$header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";

J'ai le même pb quand j'essaie de créer une fonction mail manuelle, tu as essayer de comparer les headers de tes mails et ceux envoyé par gmail ?

Merci Graf' pour ta réponse...
pour le coup j'ai refait des mails bidons(des caractères spéciaux , accentués, euro et des caractères thais dans le subjet et le content)
et je compare les headers ( en enregistrant les mails depuis windows mail en eml et en les chargeant dans notepad++),

je remarque plusieurs choses:
1°)Sous windows mail je peux enregistrer les mails envoyés par Gmail sous:
fichier eml, fichier html, fichier texte, et fichier texte Unicode
Alors les mails envoyés par mon serveur ne peuvent s'enregister que sous
fichier eml et fichier html ==> ???

2°)<u>le content-type reçu depuis gmail:</u>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
<u>depuis ma breaking news:</u>
Content-type: text/html; charset= utf8\nContent-Transfer-Encoding: 8bit
pas de Content-Transfer-Encoding

3°)<u>le subject depuis gmail:</u>
Subject: =?UTF-8?B?VEVTVDrDp8OHw6nDieKCrOKYu+KZpeKZpuKZo+KZoOKXmeKZguKZgOKZquKZq+KYvOC4lw==?=
=?UTF-8?B?4Li14LmI4Lij4Lix4LiB?=
<u>depuis la news:</u>
Subject: TEST:çÇéÉ€☻♥♦♣♠◙♂♀♪♫☼ที่รัภ- de pascal RRR le 22/11/2011 15:43:39

4°)<u>depuis gmail:</u> le contenu apparaît encodé est illisible depuis notepad:
VEVTVDrDp8OHw6nDieKCrOKYu+KZpeKZpuKZo+KZoOKXmeKZguKZgOKZquKZq+KYvOC4l+C4teC5
iOC4o+C4seC4gQo=
--bcaec501c5848ca9f504b254ab90--
<u>depuis la news:</u> je vois tout en clair:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>Ma boutique MVC</title>
</head>
<body>
<p style='text-align:center'><IMG SRC='http://maboutique.fr/img/logo/logo\_site.png'></p>
<p>TEST:çÇéɀ☻◙♂♀♪♫☼ที่รัก</p>
<p>Footer Cnil...</p>
</body></html>

Bon les mails à la base ne sont pas pareils ( même texte, mais la news l'insère dans une template html )

Je sèche un peu, je ne sais pas trop quoi faire avec ces différences.
Je laisse le sujet "non résolu" pour l'instant.

ça marche avec ce header avec windows mail !
Tous les caractères spéciaux s'affichent correctement dans le sujet et le contenu.
Mais du coup les balises html ne sont pas interprétées comme telles et s'affichent comme du texte :S
Je veux garder mon texte dans un template HTML, et ma breaking news peut être mise en forme avec tinymce,
je dois donc conserver un header 'Content-type: text/html; charset= utf8'
Bref, je crois que vais laisser tomber la compatibilité avec windows mail ;)