Проблема следующая. Есть скрипт рассылки, который (грубо говоря) берет текст, который администратор передает ему из веб-формы, приставляет к нему всякие заголовки и отправляет это всё в mail().Мне некоторые товарищи жалуются, что письма приходят нечитабельные. Я готов допустить что эти люди не умеют пользоваться установками кодировки в своем мыл-клиенте, но это всё равно "некозяво".
Правильно ли я понимаю что при такой схеме кодировка получается такой же, какая у администратора в браузере стоит? Есть ли специальные SMTP-хедеры, которые можно присобачить, чтобы они явно указывали кодировку? Как в PHP можно перекодировать русский текст из одной кодировки в другую?Спасибо!
Укажи в заголовке:Mime-Version: 1.0
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: 8bitВсё.
>Укажи в заголовке:
>
>Mime-Version: 1.0
>Content-Type: text/plain; charset=Windows-1251
>Content-Transfer-Encoding: 8bit
>
>Всё.Я делал так
function sendMail($subject, $body) {
$body = convert_cyr_string($body,"w","k");
$subject = convert_cyr_string($subject,"w","k");
mail($this->email, $subject, $body,
"From: your@mail.ru\r\n"
."Reply-To: your@mail.ru\r\n"
."Content-Type: text/plain; charset=koi8-r\r\n"
."Organization: My org\r\n"
."X-Mailer: PHP/" . phpversion());
}
> $body = convert_cyr_string($body,"w","k");
А откуда уверенность что исходная кодировка - win1251? А если вдруг станет koi? Или такая ситуёвина невозможна в принципе?
>> $body = convert_cyr_string($body,"w","k");
>А откуда уверенность что исходная кодировка - win1251? А если вдруг станет
>koi? Или такая ситуёвина невозможна в принципе?Я думаю, нет я даже уверен, что я знаю исходную кодировку =)
>> $body = convert_cyr_string($body,"w","k");
>А откуда уверенность что исходная кодировка - win1251? А если вдруг станет
>koi? Или такая ситуёвина невозможна в принципе?Браузер всегда шлет данные в той кодировке, в которой он получил страничку.
Если юзер поменял кодировку вручную, то он сам себе злой буратина.
Есть функция conver_cyr_string, которая переводит из одной кодировки в другую. Из кои в вин-1251 и наоборот и из других тоже.В заголовках письма есть такой
Content-Type: text/html; charset=windows-1251где вместо windows-1251 пишеш нужную кодировку.
Тебе перекодировывать не нужно , просто укажи в письмах кодировку, которая стоит на твоем сайте.
>Есть функция conver_cyr_string, которая переводит из одной кодировки в другую. Из кои
>в вин-1251 и наоборот и из других тоже.
>
>В заголовках письма есть такой
>Content-Type: text/html; charset=windows-1251
>
>где вместо windows-1251 пишеш нужную кодировку.
>
>Тебе перекодировывать не нужно , просто укажи в письмах кодировку, которая стоит
>на твоем сайте.Ключевой фигурой в данной проблеме выступают строки:
Mime-Version: 1.0
Content-Transfer-Encoding: 8bitСама кодировка - это второстепенно, и как сказали самовыставляемо.
Content-Type: text/plain; charset=Windows-1251А вот если не установить предыдущие два пункта, то по пути сообщения другие МТА погут изменить заголовок и ваша кодировка исчезнет по пути следования сообщения.
У меня заголовки приходят в непонятной кодировке, хотя сам текст сообщения - нормально.Тема: ����� �200804050323
Кому: "A-�����" {скрыто}
Срочность: Обычноекод:
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=windows-1251\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "From: ".$_POST["EMAIL"]."\r\n";
mail($to, $subject, $message, $headers);в чем ошибка?
>[оверквотинг удален]
>
>код:
>
>$headers = "MIME-Version: 1.0\r\n";
>$headers .= "Content-type: text/plain; charset=windows-1251\r\n";
>$headers .= "Content-Transfer-Encoding: 8bit\r\n";
>$headers .= "From: ".$_POST["EMAIL"]."\r\n";
>mail($to, $subject, $message, $headers);
>
>в чем ошибка?Указанная кодировка распространяется только на тело письма. В хедере не-ASCII символы использовать нельзя.
См. RFC2047 и http://www.opennet.me/openforum/vsluhforumID4/220.html