8797 sujets

Développement web côté serveur, CMS

Bonjour à tous.

J'écris une routine d'envoi de messages au format HTML.

Pour les adresses normales (hébergeur, FAI) le titre du message dans la liste des messages est correct
"Avec autre chose que Hotmail, la routine a écrit :
Test — Récépissé de votre commande

Avec Hotmail, c'est l'horreur :
"Avec Hotmail, la routine a écrit :
Test — Récépissé de votre commande


Une précision : je parle de la liste des messages. Le message lui-même et le titre de la fenêtre du message sont corrects.
http://img15.hostingpics.net/pics/972944hotmail.png

Comment corriger cela ?
Merci pour votre aide .


// Envoi d'un message électronique'
// Destinataire
$to='<La cible pas Hotmail <cible@exemple.fr>'.','.'La cible Hotmail <cible@hotmail.fr>';
// Sujet
$subject = 'test — Récépissé de votre commande';
// message
$message = '
<html lang="fr">
<head>
<title>Test — Récépissé de votre commande</title>
</head>
<body>
<p>Bonjour,</p>
<p>Je vous remercie pour votre commande. Voici les informations que vous avez enregistrées sur le site&nbsp;:</p>
$message.= '</body>
</html>
';
//Entête Content-type destiné à obtenir un format HTML
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset="utf-8"' . "\r\n";
// Entêtes additionnels
$headers .= 'To: '.$to."\r\n";
$headers .= 'From: Test <societe@example.fr>' . "\r\n";
$headers .= 'Cc: La société <societe@example.fr>' . "\r\n";
// Envoi du message
mail($to, $subject, $message, $headers);

Modifié par Pyanepsion (07 Jul 2012 - 10:33)
As-tu essayé, au lieu de
$subject = 'test — Récépissé de votre commande';


de mettre plutôt :
$subject = utf8_encode('test — Récépissé de votre commande');
Bonjour jytest. Merci pour ta réponse.

Hélas, ce n'est pas la bonne solution.

Ce n'est de toute façon pas $subject qui semble en cause puisque le titre du message dans la fenêtre apparait normalement. La page est par ailleurs encodée en UTF-8 dans le header. Bref ! l'utilisation de la fonction bousille alors en plus le titre du message dans la fenêtre du message (Test â&#128;&#148; Récépissé de votre commande)... mais aussi le titre dans la liste des messages (Test â Récépissé de votre commande) cette fois-ci pour les deux types d'adresses.
Modifié par Pyanepsion (07 Jul 2012 - 11:32)
Voici un bout de code, qui fonctionne à merveille chez moi :

...

	date_default_timezone_set('Europe/Brussels');
	$jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"); 
	$mois = array("","Janvier",utf8_encode("Février"),"Mars","Avril","Mai","Juin","Juillet",utf8_encode("Août"),"Septembre","Octobre","Novembre",utf8_encode("Décembre"));
	$datefr = $jour[date("w")]." ".date("d")." ".$mois[date("n")]." ".date("Y");
	$heurefr = " à ".date("H")."h".date("i");
	$datum = $datefr.$heurefr;

...

$entete = "From: societe@example.fr \n";
$entete .= "Reply-To: societe@example.fr \n";
$entete .= "Content-Type: text/html; charset=UTF-8\n";
$entete .= "Content-Disposition: inline\n";
$entete .= "Content-Transfer-Encoding: 8bit\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "Date: $datefr $heurefr\n";
$entete .= "X-Mailer: PHP/" . phpversion();
.

Tu peux essayer cela ?
Modifié par jytest (07 Jul 2012 - 16:14)
Cela ne change à vrai dire pas grand-chose.

Il ne s'agit pas ici d'éloigner un risque d'être pris pour un spam avec Hotmail. Plus simplement, le titre du message apparait mal accentué, et encore, uniquement dans la liste des messages dans le logiciel de messagerie. L'aperçu du message et son titre sont corrects dans la fenêtre d'affichage.

Sinon, merci pour ta routine d'horodatage. Voici la mienne. Elle tient compte du premier jour du mois et corrige la faute d'orthographe sur aout qui ne doit plus être accentué. Note également que je mets une majuscule sur les jours, mais c'est uniquement parce que sur mon site, c'est le premier mot de la phrase.

# Conversion de la date en français
function datefr($date){
$NomDuJour = array ("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
$NomDuMois = array ("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre", "décembre");
$lejour = date("d",$date);
$lemois = date("m",$date);
$ladatefr=$NomDuJour[ date('w',$date) ]." ";
if($lejour==01):$ladatefr.=" 1<sup>er</sup> ";
elseif($lejour<10):$ladatefr.=" $lejour[1] ";
else: $ladatefr.=date (" d ",$date);
endif;
$ladatefr.=$NomDuMois[ date($lemois - 1) ]." ".date('Y');
return $ladatefr;

Modifié par Pyanepsion (09 Jul 2012 - 11:55)