многочастная почта - проблемы акцентуаций - PullRequest
1 голос
/ 18 июля 2009

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

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 () должна применяться только к папским информационным переменным, фактически я пытаюсь кодировать в 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!

Спасибо всем!

Ответы [ 2 ]

2 голосов
/ 18 июля 2009

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

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 голосов
/ 18 июля 2009

многочастные письма в кодировке 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'));
...