web-dev-qa-db-fra.com

Problèmes d'encodage des caractères PHPMailer

J'essaie d'utiliser PHPMailer pour envoyer une inscription, une activation. etc mail aux utilisateurs:

require("class.phpmailer.php");
$mail -> charSet = "UTF-8";
$mail = new PHPMailer();
$mail->IsSMTP();  
$mail->Host     = "smtp.mydomain.org";  
$mail->From     = "[email protected]";
$mail->SMTPAuth = true; 
$mail->Username ="username"; 
$mail->Password="passw"; 
//$mail->FromName = $header;
$mail->FromName = mb_convert_encoding($header, "UTF-8", "auto");
$mail->AddAddress($emladd);
$mail->AddAddress("[email protected]");
$mail->AddBCC('[email protected]', 'firstadd');
$mail->Subject  = $sub;
$mail->Body = $message;
$mail->WordWrap = 50;  
if(!$mail->Send()) {  
   echo 'Message was not sent.';  
   echo 'Mailer error: ' . $mail->ErrorInfo;  
}

Le $message contient des caractères latins. Malheureusement, tous les courriers électroniques (gmail, webmail.mydomain.org, emailaddress.domain.xx) utilisent un code différent.

Comment puis-je forcer l'utilisation du codage UTF-8 pour afficher mon courrier exactement de la même manière sur toutes les boîtes aux lettres?

J'essaie de convertir la largeur de l'en-tête du courrier mb_convert_encoding(), mais sans succès.

165
Holian

Si vous êtes sûr à 100% que $ message contient ISO-8859-1, vous pouvez utiliser tf8_encode comme le dit David. Sinon, utilisez mb_detect_encoding et mb_convert_encoding sur $ message.

Prenez également note que

$mail -> charSet = "UTF-8"; 

Devrait être remplacé par:

$mail->CharSet = 'UTF-8';

et placés après l'instanciation de la classe (après la new). Les propriétés sont sensibles à la casse! Voir le PHPMailer doc pour la liste et l'orthographe exacte.

Le codage par défaut de PHPMailer est également 8bit, ce qui peut poser problème avec les données UTF-8. Pour résoudre ce problème, vous pouvez faire:

$mail->Encoding = 'base64';

Prenez note que 'quoted-printable' fonctionnerait probablement aussi dans ces cas (et peut-être même 'binary'). Pour plus de détails, vous pouvez lire RFC1341 - Champ d'en-tête Content-Transfer-Encoding .

413
AlexV
$mail -> CharSet = "UTF-8";
$mail = new PHPMailer();

la ligne $mail -> CharSet = "UTF-8"; doit être après $mail = new PHPMailer(); et sans espace!

essaye ça

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
24
user2354947

Désolé d'être en retard sur la fête. Selon la configuration de votre serveur, vous devrez peut-être spécifier le caractère strictement avec lettres minuscules utf-8, sinon il sera ignoré. Essayez ceci si vous vous retrouvez ici à la recherche de solutions et qu'aucune des réponses ci-dessus ne vous aide:

$mail->CharSet = "UTF-8";

devrait être remplacé par:

$mail->CharSet = "utf-8";
5
vzr

Je me travaille de cette façon

  $mail->FromName = utf8_decode($_POST['name']);

http://php.net/manual/en/function.utf8-decode.php

5
yorkfx
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->Encoding = "16bit";
2
ali ebrahimi

Je devenais oacute; dans $ mail-> Subject/w PHPMailer.

Donc pour moi la solution complète est:

// Your Subject with tildes. Example.
$someSubjectWithTildes = 'Subscripción España';

$mailer->CharSet = 'UTF-8';
$mailer->Encoding = 'quoted-printable';
$mailer->Subject = html_entity_decode($someSubjectWithTildes);

J'espère que ça aide.

1
biojazzard

@ $mail -> charSet = "UTF-8";

--- cette ligne devrait être sous

$mail = new PHPMailer(); line.

pff ..


Oui c'est correct. Vous devez le placer après l'instanciation de l'objet.

0

Pour éviter les problèmes de codage de caractères lors de l'envoi d'e-mails avec la classe PHPMailer, nous pouvons le configurer pour qu'il soit envoyé avec le codage de caractères UTF-8 à l'aide du paramètre "CharSet", comme indiqué dans le code Php suivant:

$mail = new PHPMailer();
$mail->From = '[email protected]';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('[email protected]');
$mail->Subject = 'Prueba';
$mail->Body = '';
$mail->IsHTML(true);


// Active condition utf-8
$mail->CharSet = 'UTF-8';


// Send mail
$mail->Send();
0
Mohammed Alhfian

Si votre message utilise Latin1, vous pouvez utiliser tf8_encode Fonctionne pour moi, de toute façon.

0
David V.

Le moyen le plus simple et qui vous aidera à définir CharSet sur UTF-8

$mail->CharSet = "UTF-8"
0
Trung Bui