Problème encodage caractères dans mails envoyés
Bonjour,
Lors de l'envoi de mail par le site la mail arrive avec un problème de caractères accentués: éééé devient ����
J'ai essayé plusieurs chose trouvé sur les forums mais le problème reste.
Script-Nous écrire:
function nousecrire()
{
message_bleu("Complétez ce formulaire électronique pour nous écrire");
message_noir("Des questions,des problèmes d'inscription ....");
ligne_noire();
message_rouge("Ce message sera envoyé à ....");
if ($_POST['action2'] == Envoyer) {
$valid = 1;
// ************************* Vérification champ OBJET
if ($_POST['OBJET'] == "") {
$valid = 0;
$mes = "<font color=\"#FF0000\">OBJET: Vous devez entrer un objet !<BR>";
}
// ************************* Vérification champ E_MAIL
if (! preg_match("/^(.+)@(.+)\\.(.+)$/", $_POST['E_MAIL'])) {
$valid = 0;
$mes = $mes . "<font color=\"#FF0000\">E MAIL: Vous devez entrer votre email !<BR>";
}
// *********************** Vérification champ MESSAGE
if ($_POST['MESSAGE'] == "") {
$valid = 0;
$mes = $mes . "<font color=\"#FF0000\">MESSAGE: Vous devez entrer un message !<BR>";
}
if ($valid == 0) {
echo "<BR>";
echo "$mes";
echo "<FORM METHOD='POST' ACTION=\"index.php?action=NousEcrire\" NAME='frmNousEcrire'>\n";
echo "<input type=\"hidden\" name=\"OBJET\" size=\"80\" value=\"$_POST[OBJET]\"><BR>";
echo "<input type=\"hidden\" name=\"E_MAIL\" size=\"80\" value=\"$_POST[E_MAIL]\"><BR>\n";
echo "<input type=\"hidden\" name=\"MESSAGE\" value=\"$_POST[MESSAGE]\"><BR>";
echo "<input type=\"submit\" name=\"action2\" value=\"Corriger\">\n";
}
if ($valid == 1) {
echo " <font color=\"#000000\"> \n";
$mes = "<BR>Le message suivant a été envoyé :<BR><BR>";
$mes = $mes . "OBJET:$_POST[OBJET]<BR>";
$mes = $mes . "E_MAIL:$_POST[E_MAIL]<BR>";
$mes = $mes . "MESSAGE:$_POST[MESSAGE]<BR>";
echo "$mes";
echo "<FORM METHOD='POST' ACTION=\"index.php\" NAME='frmNousEcrire'>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Retour\">\n";
$mes = "Le message suivant a été envoyé par l'";
$mes = $mes . "identfiant: *" . $_SESSION['id'] . "*\n";
$mes = $mes . "OBJET: $_POST[OBJET]\n";
$mes = $mes . "E_MAIL: $_POST[E_MAIL]\n";
$mes = $mes . "MESSAGE:$_POST[MESSAGE]\n";
envoi_mail("message",$mes ,"" ,"tous" );
}
exit;
}
echo "<table cellSpacing=\"0\" cellPadding=\"5\" width=\"578\" border=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\">\n";
echo "\n";
echo " <tr><td width=\"20\"><font size=\"1\"> </td><td width=\"400\"> </td></tr>\n";
echo "\n";
echo "<TR><TD></TD><TD>";
echo "<FORM METHOD='POST' ACTION=\"index.php?action=NousEcrire\" NAME='frmNousEcrire'>\n";
echo "OBJET:<BR>";
echo "<input name=\"OBJET\" size=\"80\" value=\"$_POST[OBJET]\"><BR>";
echo "Votre Adresse mail:<BR>";
echo "<input name=\"E_MAIL\" size=\"80\" value=\"$_POST[E_MAIL]\"><BR>\n";
echo "Message:<BR>";
echo "<textarea rows=\"13\" name=\"MESSAGE\" value=\"$_POST[MESSAGE]\" cols=\"62\">$_POST[MESSAGE]</textarea><BR>";
echo "<input type=\"submit\" name=\"action2\" value=\"Envoyer\">\n";
echo "<input type=\"reset\" name=\"Reset\" value=\"Effacer\">\n";
echo "</FORM>";
echo "</TD></TR>";
echo "</TABLE>\n";
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo " </div>\n";
echo " <p> </td>\n";
echo " </tr>\n";
echo "</table>\n";
exit;
Script-envoi mail:
function envoi_mail ($objet, $texte, $dest, $cc)
{
global $host, $mail_avertir1, $mail_avertir2, $debug;
if ($debug) {
$objet = "[Mode DEBUG] " . $objet;
$dest = "";
$cc = "";
$mail_avertir1 = "";
$mail_avertir2 = "";
//$texte = utf8_encode($texte);
}
$objet = "[XXXXXX 2020!] " . $objet;
if ($host == "www........fr") {
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->From = "xxx@xxxxx.fr";
$mail->FromName = "XXXXXX";
$mail->AddAddress("yyyy@yyyyy.fr");
if ($dest != "") {
$mail->AddAddress($dest);
}
if ($cc == "tous") {
if ($mail_avertir1 != "") {
$mail->AddAddress($mail_avertir1);
}
if ($mail_avertir2 != "") {
$mail->AddAddress($mail_avertir2);
}
}
$mail->AddReplyTo("zzz@zzz.fr");
$mail->Subject = $objet;
$mail->Body = $texte;
if (! $mail->Send()) {
// header('Content-Type: text/html');
// printf("<html><body>");
// printf("ERREUR : Message non envoyé !</p>");
// printf("ERREUR SMTP : " . $mail->ErrorInfo );
// printf("</body></html>");
} else {
// header('Content-Type: text/html');
// printf("<html><body>");
// printf("SUCCES : Message envoyé !</p>");
// printf("</body></html>");
}
return;
}
lorsque je teste en appelant le script suivant, pas de problème:
mail-test.php
<?php
// On va chercher la dénition de la classe
require('class.phpmailer.php');
// On créune nouvelle instance de la classe
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
// De qui vient le message, e-mail puis nom
$mail->From = "elus@cgt.fr";
$mail->FromName = "Les Elus CAPN";
// Dénition du sujet/objet
$mail->Subject = "[MUTATIONS 2020!] Confirmation de mail";
// On lit le contenu d'une page html
$mail->Body = "Bonjour,
éééééé àààààà
Salutations ";
// Il reste encore àjouter au moins un destinataire
$mail->AddAddress("xxx@xxx.fr");
// Pour finir, on envoi l'e-mail
$mail->send();
echo "Mail parti";
?>
Voilà l'état des lieux, vous remerciant pour votre aide
Bien cordialement
Réponses apportées à cette discussion
C'est un problème d'encodage. Là, on a des caractères avec un encodage iso-8859-1 affiché dans une page encodée en utf-8
Il faut utiliser la fonction utf8_encode() pour convertir les caractères en iso-8859-1 en utf8 avant affichage. Voir la documentation