Задать вопрос
Equillibrium
@Equillibrium

Помогите с php mail() headers кодировкой, пожалуйста

Привет!
Только начал разбираться с php и уже вторые сутки не пойму в чем беда.
В письмах, отсылаемых php, в некоторых почтовых клиентах слетает кодировка в поле «от кого». Такая же проблема была с темой письма, однако решилась путём:
mail($to,"=?windows-1251?B?".base64_encode($subject)."?=",$message,$headers); — вместо просто mail($to,$subject,$message,$headers);

Однако, когда такой же костыль я вставляю в $headers в поле From: то сообщения не отсылаются вообще. В логе постфикс только рапорты об отправленных сообщениях. Что я вставляю в $headers:
$headers .= "From: =?windows-1251?B?".base64_encode($mailfrom)."?= <".$email."> \r\n";

Помогите разобраться пожалуйста! Спасибо заранее.
ubuntu server, php+postfix
  • Вопрос задан
  • 15179 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
sam002
@sam002
Линуксойд, кодер, немного физик.
Собственно, интересны переносы — оберните в <source ></source>
Да и адрес отправителя надо указать…
From: =?windows-1251?B?x+D/4uroIO3gIOLo5+jy6ug=?= <admin@test.com>
Ответ написан
Комментировать
@hell
From правильнее кодировать с помощью mb_encode_mimeheader до того, как кодировать прочие заголовки.
Т.е. алгортим примерно следующий:

Проверяем, что у нас есть mbstring (для старых версий php возможны варианты)
Проверяем, что у mbstring прописаны правильные значения кодировок по умолчанию (читаем доки, в том числе по функции mb_encode_mimeheader)
Кодируем поле FROM с помощью mb_encode_mimeheader
Устанавливаем все хидеры (имеет смысл посмотреть реализацию PEAR — там не без ошибок, как ни удивительно, но в целом оно рабочее)
Ответ написан
blare
@blare
Отсылать надо в KOI8-R
Если воспользоваться гуглом и набрать «mail кодировка», то 6 ссылка будет решением вашей проблемы.
webew.ru/articles/297.webew
Ответ написан
sam002
@sam002
Линуксойд, кодер, немного физик.
Недавно делал… Вот корректрый заголовок (cp1251 для старых outlook-ов):

To: =?windows-1251?B?xPPh6O3gINHl7OXtICJzYW0wMDIi?= <semen@sam002.net>,=?windows-1251?B?RHViaW5hIFNlbWVu?= <admin@xn--80abidauyjd6a1a.xn--p1ai>

Отображается, как:
Дубина Семен "sam002" <semen@sam002.net>, Dubina Semen <admin@семендубина.рф>

«Кому» надо кодировать отдельно, как видите…
$to = "";
foreach( $emails as $email) {
        $to .= "=?windows-1251?B?" . base64_encode(iconv("UTF-8", 'cp1251', $name)) . "?= <$email>";
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы