Вопрос

Я пытаюсь отправить составное / альтернативное 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'));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top