составная почта - проблемы с акцентированием
Вопрос
Я пытаюсь отправить составное / альтернативное MIME-электронное письмо с помощью PHP-скрипта ...все работает нормально, но у меня некоторые проблемы с кодировкой!Выделенные символы в тексте электронного письма неправильно отображаются в почтовом клиенте!Как можно закодировать тело, чтобы решить эту проблему?...Я пытался использовать ..
utf8_encode($body)
Без хороших результатов!
В некоторых электронных письмах в формате raw я заметил, что акценты заменены на =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));
Редактировать:
В $txt_body
и $html_body
являются содержимым двух файлов:
$txt_body = file_get_contents(...);
$html_body = file_get_contents(...);
В этих файлах я заменяю некоторую информацию, которую я получаю от PayPal через IPN.Я заметил, что когда я получаю электронное письмо, неверно отображаются только акценты, которые встречаются в информации IPN (другими словами, дополнительная информация, которую я заменяю в содержимом файлов)!Остальные подчеркнутые символы показаны правильно!!
Как я могу решить эту проблему?
РЕШАЕМАЯ:
Я решил проблему!функция utf8_encode() должна применяться только к папским информационным переменным , фактически я пытаюсь закодировать в utf8 $ txt_body ...переменные paypal кодируются 2 раза в utf8.Другими словами, я сделал это:
$txt_body = utf8_encode(file_get_contents(...));
$html_body = utf8_encode(file_get_contents(...));
и затем в $txt_body и $html_body я заменил информацию, полученную через IPN!
Спасибо ererybody!
Решение
Вам нужно объявить кодировку символов, которую вы использовали в заголовке этой конкретной части:
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--
Другие советы
составные письма в кодировке utf-8 могут быть легко созданы с Быстрый почтовик
$message->addPart($txt_body, 'text/plain', 'utf-8');
$message->addPart($html_body, 'text/html', 'utf-8');
$message->attach(Swift_Attachment::fromPath('/path/to/testfile'));