2009-07-18 2 views
1

Я пытаюсь отправить многопользовательскую/альтернативную электронную почту MIME через PHP-скрипт ... все работает нормально, но у меня есть некоторые проблемы с кодировкой! Акцентированные символы в теле письма отображаются неверно в почтовом клиенте! Как закодировать тело для решения этой проблемы? ... Я пытался использовать ..multipart mail - проблемы с акцентуациями

utf8_encode($body) 

Без хороших результатов!

В некотором необработанном формате электронной почты я заметил, что акцентуации заменены на = XX (где XX - буквенно-цифровой символ) ... Как я могу это сделать?

Заранее благодарен!

Это код:

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

$txt_body и $html_body являются содержимое двух файлов:

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

В том, что файлы я заменить некоторую информацию, которая Я получаю от PayPal через IPN. Я заметил, что когда я получаю электронное письмо, неверно отображаются только акцентуации, возникающие в информации IPN (другими словами, дополнительная информация, которую я заменяю в содержимом файлов)! Другие акцентированные персонажи показаны правильно!

Как я могу это решить?

РЕШИТЬ:

Я решил эту проблему! Функция utf8_encode() должна применяться только к информационным переменным papal, на самом деле я пытаюсь кодировать в utf8 $ txt_body ... переменные paypal кодируются 2 раза в utf8. Другими словами, я сделал, что:

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

и чем в $ txt_body и $ html_body Я заменил информация, полученные через СПИ!

Спасибо ererybody!

+0

Почему вы используете 'multipart/alternative', когда нет альтернативы? Почему вы не используете просто «multipart/mixed»? – Gumbo

+0

Да, вы правы! – BitDrink

+0

Вы попробовали кодировку * quoted-printable * или * base64 * transfer? – Gumbo

ответ

1

Вы должны объявить кодировку символов вы использовали в заголовке этой конкретной части:

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

Спасибо вашему ответу! Да, я использовал utf-8 как кодировку, но когда я получаю почту, акцентуации не отображаются правильно! – BitDrink

+0

Ну, значит, это ваши данные, которые не кодируются UTF-8. Объявление кодировки символов не изменяет фактическое кодирование. Это просто изменяет способ интерпретации данных. – Gumbo

0

UTF-8 кодируются многокомпонентные письма могут быть легко созданы с 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

Но моя проблема заключается в кодировке только информации, которую paypal отправил на мой php-скрипт через IPN – BitDrink

+0

. Тогда эти данные (из paypal) не кодируются utf-8? – VolkerK

Смежные вопросы