envoi de mail texte + HTML : quel codage choisir ?

Comme le savent certains d'entre vous, ma newsletter n'est pas visible dans certains logiciels de messagerie (c'est le cas notamment d'Hotmail).
Le problème vient sûrement du codage que j'utilise. Voilà une partie de mon code de génération du mail (texte + HTML) :
Code:
      // html section 
      $Msg.="\n--".$IB."\n";
      $Msg.="Content-Type: text/html;\n\tcharset=\"iso-8859-1\"\n";
      $Msg.="Content-Transfer-Encoding: base64\n\n";
      // html goes here 
      $Msg.=chunk_split(base64_encode($Html))."\n\n";
Est-ce que l'un d'entre vous pourrait me dire ce qu'il faut utiliser pour envoyer un mail HTML lisible par tout le monde ? Merci d'avance.

Olivier
 
Bonjour,
ceci
Code:
/* Pour envoyer un mail au format HTML, vous pouvez configurer le type Content-type. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* et hop, à la poste */
mail($to, $subject, $message, $headers);
?>
 
j'avais essayé mais ça ne marchait pas dans tous les cas (évidemment je n'avais pas noté lesquels). Je crois que je vais y revenir et je verrai bien ce que ça donne !
 
Si vous permettez que je "squatte" juste un peu ce topic : j'envoie des mails en texte, est-ce quand même nécessaire de préciser le charset dans les headers (sachant que mon fichier script qui envoie le mail est lui-même encodé en iso-8859-1) ?
 
Pourquoi ne pas passer directement à l'UTF-8? Il est universel et j'ai deja reçu des mails en japonnais sous hotmail, les caractères accentués francais ne doivent donc pas être un problème...
 
Bobez a dit:
Si vous permettez que je "squatte" juste un peu ce topic : j'envoie des mails en texte, est-ce quand même nécessaire de préciser le charset dans les headers (sachant que mon fichier script qui envoie le mail est lui-même encodé en iso-8859-1) ?
Le paramètre accept-charset de la balise form prime sur l'encodage du script et de la page...
 
maxttb a dit:
Pourquoi ne pas passer directement à l'UTF-8? Il est universel et j'ai deja reçu des mails en japonnais sous hotmail, les caractères accentués francais ne doivent donc pas être un problème...
aurais-tu qq lignes de code d'exemple ?
 
maxttb a dit:
Le paramètre accept-charset de la balise form prime sur l'encodage du script et de la page...
Donc, si je te suis bien, il vaut mieux que je rajoute le charset dans les headers ?

Code:
$headers .= "charset=iso-8859-1\r\n";
 
WebRankInfo a dit:
aurais-tu qq lignes de code d'exemple ?
Code:
$Msg.="Content-Type: text/html; charset=utf-8\n";
Et le tour est joué.
Du moins, c'est ce que je fais dans un script Perl pour envoyer des mails. Attention cependant, il faut renseigner la balise FORM avec le paramètre accept-charset :
Code:
<form action="script.php" method="post" accept-charset="utf-8">
 
Bobez a dit:
maxttb a dit:
Le paramètre accept-charset de la balise form prime sur l'encodage du script et de la page...
Donc, si je te suis bien, il vaut mieux que je rajoute le charset dans les headers ?

Code:
$headers .= "charset=iso-8859-1\r\n";
il faut impérativement que les charsets lors de ton envoi de mail et de ton formulaire soient identiques, à moins bien sûr de faire la conversion dans le script...
Dans ton cas, le fait que ton email soit en mode texte ne change rien à l'encodage lui même... En effet, le mode texte ou HTML ne sert qu'aux logiciels clients lors du rendu du message. Qu'il soit texte ou HTML, si le jeu de caractères n'est pas le bon, il ne sera pas affiché correctement. Tu peux très bien encoder un message texte en UTF-8 ou un message HTML en iso-8859-1.
Une petite ligne dans l'header permet, à coup sûr (à moins bien entendu que le jeu de caractère ne soit pas installé) d'avoir un rendu correct. Pourquoi ne pas le mettre?
 
maxttb a dit:
Une petite ligne dans l'header permet, à coup sûr (à moins bien entendu que le jeu de caractère ne soit pas installé) d'avoir un rendu correct. Pourquoi ne pas le mettre?
En effet ! Par contre j'ai essayé de l'ajouter, mais ça foire ! Comment faut-il le goupiller avec le header "From" ? Car ce que je fais ne fonctionne pas, il assimile le charset à une annonce du champ from...
Merci
 
Bobez a dit:
En effet ! Par contre j'ai essayé de l'ajouter, mais ça foire ! Comment faut-il le goupiller avec le header "From" ? Car ce que je fais ne fonctionne pas, il assimile le charset à une annonce du champ from...
Merci
Ajoute ceci à ton header, juste avant le message :
Code:
$Msg.="Content-Type: text/plain; charset=charset=iso-8859-1\n";
Je ne suis pas certain que mettre un \r serve à quelque chose, à moins bien sûr que ton serveur soit sous Windows.
 
Salut,

Cela ne fonctionne tjs pas, je ne saisis pas bien s'il faut mettre ça dans les headers où dans le corps du message ? Voici mon code actuel :

Code:
$sujet = 'Sujet du message';
$corps = 'bla bla bla bla';
$headers = 'From: Bobez <bobez@domaine.com>';
mail($email, $sujet, $corps, $headers);
 
Au temps pour moi, il faut le rajouter dans les headers...
Code:
$headers.="Content-Type: text/plain; charset=charset=iso-8859-1\n";
J'ai confondu ton source avec celui de WebRankInfo
 
Merci pour la précision, mais cela ne fonctionne toujours pas ! Le champ "From" du mail reçu est le suivant :

Code:
From: "Bobez <bobez@domaine.com>Content-Type": text/plain@60gp.ovh.net;, charset=charset=iso-8859-1n@60gp.ovh.net
 
Mea culpa, problème résolu. Visiblement il n'appréciait pas que je mette

Code:
$headers .= 'Content-Type: text/plain; charset=iso-8859-1\n';
au lieu de
$headers .= "Content-Type: text/plain; charset=iso-8859-1\n";

Merci pour ton aide, maxttb :)
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut