Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кодировка при отправке почты функцией mail() в php

woofer Ученик (210), закрыт 10 лет назад
приходит в виде "?". Непонятно почему только некоторые буквы заменяются на "?".

Функция отправки почты вот такая:
function mail_utf8($to, $from, $subject, $message)
{
$subject = '=?UTF-8?B?' . base64_encode($subject) . '?=';

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit \r\n";
$headers .= "From: $from\r\n";

return mail($to, $subject, $message, $headers);
}

Кодировка скрипта utf-8. Текст письма формируется из данных, которые берутся из БД MySQL. База также в uft-8. Эти же данные на сайте выводятся верно.

Из-за чего может быть неверный вывод некоторых символов в письме?
Дополнен 10 лет назад
Начало текста удалилось:
Суть проблемы вот в чем: при отправке письма средствами функции mail() в php часть кириллических символов тела письма приходит в виде "?! ?". Непонятно почему только некоторые буквы заменяются на "?! ?".
Дополнен 10 лет назад
Народ, читайте, пожалуйста, внимательней.

Скрипт в utf-8, база в utf-8. Вывод на экран без ошибок.
При отправке на почту ЧАСТЬ символов искажена, не весь текст.
Вот пример:
Беспл! атная доставка Вашего заказа по в? ! ?ей России
Дополнен 10 лет назад
Народ, читайте, пожалуйста, внимательней.

Скрипт в utf-8, база в utf-8. Вывод на экран без ошибок.
При отправке на почту ЧАСТЬ символов искажена, не весь текст.
Вот пример:
Беспл! атная доставка Вашего заказа по в? ! ?ей России
Лучший ответ
VilDara Гуру (3252) 10 лет назад
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/plain; charset=utf-8";
$headers[] = "From: Sender Name <sender@domain.com>";
$headers[] = "Bcc: JJ Chong < bcc@domain2.com > ";
$headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $email, implode("\r\n", $headers));

Обратите внимание на эту строчку:

$headers[] = "Content-type: text/plain; charset=utf-8";

Важно: страница, с которой отправляете письмо, должна иметь такую же кодировку, в данном случае utf-8
Источник: Если что, можете написать на почу, попробую помочь.
Остальные ответы
Арсен Арутюнян Гуру (4686) 10 лет назад
return mail($to, $subject, iconv("windows-1251", "utf-8" ,$message), $headers);
Кирилл Матасов Мастер (1309) 10 лет назад
сначала кодируешь в UTF-8 . потом в Base 64
Похожие вопросы