2009-07-18 7 views
1

J'essaie d'envoyer un courrier électronique MIME multipart/alternative via un script PHP ... tout fonctionne bien mais j'ai quelques problèmes avec l'encodage! Les caractères accentués, dans le corps de l'e-mail, sont affichés à tort dans le client de messagerie! Comment encoder le corps pour résoudre ce problème? ... J'ai essayé d'utiliser ..courrier multipart - problèmes d'accentuation

utf8_encode($body) 

Sans de bons résultats!

Dans certains e-mails au format brut, j'ai remarqué que les accentuations sont remplacées par = XX (où XX est un caractère alphanumérique) ... Comment puis-je faire cela?

Merci d'avance!

Voici le code:

$header = "From: \n"; 
$header .= "Reply-To: \n"; 
$header .= "Content-Type: multipart/alternative; boundary=$alt_boundary\n"; 
$header .= "Mime-Version: 1.0\n"; 
$header .= "X-Mailer: PHP/".phpversion()."\n"; 

$body .= "\n".wordwrap($txt_body, 70); 

$body .= "\n\n--$alt_boundary\n"; 
$body .= "Content-Type: multipart/mixed; boundary=$mixed_boundary\n"; 

$body .= "\n\n\n--$mixed_boundary\n"; 
$body .= "Content-Type: text/html; charset=utf-8\n"; 
$body .= "Content-Transfer-Encoding: 7bit\n"; 

$body .= "\n".wordwrap($html_body, 70); 

$body .= "\n\n\n--$mixed_boundary\n"; 
$body .= "Content-Disposition: attachment filename=\"test file\"\n"; 
$body .= "Content-Type: application/octet-stream; x-unix-mode=0644; name=\test file\"\n"; 
$body .= "Content-Transfer-Encoding: 7bit\n"; 

$body .="\n$file"; 

$body .= "\n\n--$mixed_boundary--"; 
$body .= "\n\n--$alt_boundary--"; 

mail($to, $subject, $body, utf8_encode($header)); 

EDIT:

Le $txt_body et $html_body sont le contenu de deux fichiers:

$txt_body = file_get_contents(...); 
$html_body = file_get_contents(...); 

Dans ce fichiers, je remplaçons quelques informations que Je reçois de PayPal via IPN. J'ai remarqué que lorsque je reçois l'e-mail, seules les accentuations qui se produisent dans les infos IPN sont affichées à tort (en d'autres termes les informations supplémentaires que je remplace dans le contenu des fichiers)! Les autres caractères accentués sont affichés correctement !!

Comment puis-je résoudre ce problème?

SOLVED:

Je l'ai résolu le problème! La fonction utf8_encode() ne doit être appliquée qu'aux variables info pontificales, en fait j'essaie d'encoder dans utf8 le $ txt_body ... les variables paypal sont encodées 2 fois dans utf8. En d'autres termes, je l'ai fait que:

$txt_body = utf8_encode(file_get_contents(...)); 
$html_body = utf8_encode(file_get_contents(...)); 

et que dans txt_body de $ et html_body $ J'ai remplacé l'info reçue par IPN!

Merci à ererybody!

+0

Pourquoi vous utilisez 'multipart/alternative' lorsqu'il n'y a pas d'alternative? Pourquoi n'utilisez-vous pas simplement 'multipart/mixed'? – Gumbo

+0

Oui, vous avez raison! – BitDrink

+0

Avez-vous essayé un encodage de transfert * quoted-printable * ou * base64 *? – Gumbo

Répondre

1

Vous devez déclarer le caractère d'encodage que vous avez utilisé dans l'en-tête de cette partie spécifique:

MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary 

--boundary 
Content-Type: text/plain; charset=utf-8 

This part uses UTF-8. 
--boundary 
Content-Type: text/plain; charset=iso-8859-1 

This part uses ISO 8859-1. 
--boundary-- 
+0

Merci pour votre réponse! Oui, j'ai utilisé utf-8 comme charset mais quand je reçois le mail, les accentuations ne s'affichent pas correctement! – BitDrink

+0

Eh bien, c'est probablement vos données qui ne sont pas codées en UTF-8. La déclaration de codage de caractères ne modifie pas le codage réel. Cela change simplement la façon dont les données sont interprétées. – Gumbo

0

encodage UTF-8 mails multipart peuvent facilement être créés avec SwiftMailer

$message->addPart($txt_body, 'text/plain', 'utf-8'); 
$message->addPart($html_body, 'text/html', 'utf-8'); 
$message->attach(Swift_Attachment::fromPath('/path/to/testfile')); 
+0

Mais mon problème est l'encodage seulement de l'information que paypal envoyé à mon script PHP via IPN – BitDrink

+0

Ensuite, ces données (de paypal) ne sont pas encodées en utf-8? – VolkerK

Questions connexes