Php pro bid: письма в нужной кодировке
18.04.2011
Проблематика.
Даже после проведения работ по замене кодировки сайта на php pro bid, дополнения блока языкового перевода, скрипт продолжал отправлять письма с неверным сообщение о кодировке тела письма (к примеру в foxmail5). В общем случае это не столь уж и страшно. Любой мейлер клиент позволяет изменить кодировку полученного письма и корректно прочитать сообщения. Но, хотелось бы закоченности в работе,
удовлетворенности от полученных результатов.
Решение проблемы.
Решение как и всегда после долгих поисков оказалось лежащим на поверхности. Главное – это было найти ту “поверхность” в которой и решалась проблематика поставленного вопроса. В общем случае, функционирование скрипта определяется работой файла includes/functions.php. В нем есть функция отправки мейлов с сайта – function send_mail. Нам нужно чтобы письма отправлялись в правильной кодировке (windows-1251). Находим в этой функции в 2х местах упоминание о кодировке iso-8859-1. Заменяем в notepad на windows-1251.
В той же функции находим упоминание о (так же в 2х местах)
"Content-Transfer-Encoding: 7bit\n".
Заменяем конструкцию на следующее
"Content-Transfer-Encoding: 8bit\n".
Далее, перед строкой
$params = sprintf("-oi -f %s", $from_email);
прописываем
$subject = "=?windows-1251?b?" . base64_encode($subject) . "?=";
Насколько это верно и правильно не берусь рассуждать. На наших четырех сайтах отрабатывает корректно, пробуйте, оставляйте отзывы и пожелания.
Необходимое уточнение и дополнение. Если все же текст письма в браузере читается нормально, а почтовые клиенты неправильно воспринимают кодировку, то причина может быть только в одном – это неверно выставленная кодировка. Перепроверьте себя еще раз – правильно ли выставлены настройки кодировки отображения сайта, кодировка базы, соединения сайта с базой, все ли файлы почты скорректированы под нужную кодировку. Если в каком то из моментов вы не до конца выполнили предложенные изменения (поиск по блогу по терминам рулит), то и нечего удивляться, что в каком то моменте появятся ошибки отображения русских букв.