2010-03-22 10 views
108

j'essaie d'utiliser PHPMailer d'envoyer l'enregistrement, l'activation. etc courrier aux utilisateurs:caractère PHPMailer encodage émet

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 est contenir des caractères latins. Malheureusement, tous les webmail (gmail, webmail.mydomain.org, emailaddress.domain.xx) utilisent un codage différent.

Comment puis-je forcer à utiliser le codage UTF-8 pour montrer mon courrier exactement le même sur toutes les boîtes aux lettres?

J'essaie de convertir l'en-tête de courrier largeur mb_convert_encoding(), mais pas de chance.

+0

avez-vous changé quelque chose? –

+0

La capitalisation de CharSet ci-dessus a été modifiée par bovender. – gogowitsch

Répondre

299

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

Veuillez également prendre note que

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

devrait être remplacé par:

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

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

+16

Eh bien, je ne sais pas si quelqu'un se soucie comme cela est vieux fou, mais je devais ajouter mail- $> encoding = « base64 » pour que cela fonctionne pour moi –

+4

@AndrewRevak Tu as sauvé la journée! :) – carla

+2

@AndrewRevak Des trucs géniaux! C'est la chose qui l'a résolu. – BernardA

0

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

-4

$ mail -> charset = "UTF-8"; --- cette ligne devrait être sous $ mail = new PHPMailer(); ligne.

pff ..

4

Je travaille moi-même de cette façon

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

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

+0

Je n'ai pas de chose POST moi-même, juste une chaîne française régulière écrite dans un fichier encodé en utf-8, et cela a fonctionné comme un charme, merci! – toni07

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

ligne $mail -> CharSet = "UTF-8"; doit être postérieure à $mail = new PHPMailer(); et sans espace!

essayer cette

$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
+2

J'ai mis à jour cet article pour une meilleure lecture, mais la question de l'op a déjà été répondue 2 ans auparavant! Et cette réponse acceptée était déjà incluse. – Dwza

0

@ $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

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire en dessous de son message - vous pouvez toujours commenter vos propres messages, et une fois que vous aurez suffisamment de [réputation] (http://stackoverflow.com/help/whats-reputation) vous pourrez être capable de [commenter sur n'importe quel post] (http://stackoverflow.com/help/privileges/comment). –

+0

Ce n'est pas une demande de critique ou de clarification pour ce problème. La réponse correcte est: $ mail = new PHPMailer(); $ mail-> CharSet = 'UTF-8'; –

+0

Sur Zoé, ça ressemble à un commentaire sur la réponse de Holian, car il n'y ajoute rien. –

-1
$mail = new PHPMailer(); 
$mail -> CharSet = "UTF-8"; 
0

La façon la plus simple et vous aidera à définir est charset UTF-8

$mail->CharSet = "UTF-8" 
+0

Il a déjà une ligne exacte dans son exemple de code. –

+0

@NickZuber La ligne exacte est là en raison des modifications. Ce n'était pas si précis dans la question originale ... –

1

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

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

doit être remplacé par:

$mail->CharSet = "utf-8"; 
2
$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
$mail->Encoding = "16bit"; 
0

Pour éviter des problèmes de codage des caractères dans l'envoi de courriels en utilisant la classe PHPMailer nous pouvons le configurer pour l'envoyer avec le codage de caractères UTF-8 en utilisant le paramètre "CharSet", comme on peut le voir 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();