Не правильно работает функция mail()

 
0
 
PHP
ava
lollollollol | 18.03.2013, 09:12
Доброго времени суток!

У меня очень странная проблема.

Есть код:

//Заполнение переменных, составление хедера и т.д.
mail($to,$subj,$body,$headers,$params);

В результате в переменной $body все переносы строк удваиваются! В результате письмо приходит в корявом виде.


Такое замечено только на одном сервере. Проверял работу скрипта на нескольких других серверах, работает идеально.


В какую сторону копать, прошу подсказать.


Заранее благодарен!
Comments (3)
ava
bars80080 | 18.03.2013, 14:55 #
попробуйте для этого конкретного случая пропустить $body через такой фильтр:


$body = str_replace("\r\n", "\n", $body);
ava
Арантир | 18.03.2013, 19:10 #
lollollollol, php не умеет отправлять письма. Он обращается к локальному почтовому серверу на порт 25 и отдает ему письмо, а почтовый сервер уже его отправляет. Так вот, есть на почтовых сервера такая процедура "cleanup" (очистка), которая оптимизирует письмо, удаляя/заменяя/исправляя неправильные символы и такое подобное. В linux перенос строки обозначается просто "\n", а "\r\n" — по большей части способ для windows. А веб-сервера и хостинги обычно как раз под linux и работают. Видимо, на одном из серверов из-за плохой настройки, бага, старой версии или еще какого перепуга почтовый сервер заменяет "\r" на "\n". Кстати, самый распространенный, но неопасный, случай — замена "\r\n" на "\n" при cleanup'е письма (что часто вызывает головную боль у пытающихся опставить себе DKIM на почтовый сервер). Удваивание переносов — это просто баг, судя по всему.
Если у вас VDS/VPS, то попробуйте обновить почтовый демон либо попробовать другой.
Если доступа к серверу нет, то способ bars80080 вполне должен помочь. Хотя вы можете обратится в тех. поддержку хостинга с просьбой обновить/заменить почтовый демон на сервере.
ava
lollollollol | 19.03.2013, 06:09 #
bars80080, забыл сразу сказать что я это проверил первым делом. Не помогло.

Arantir, спасио за ответ, вероятно севрер удваивает /n.


Но вот что странно, если вместо mail($to,$subj,$body,$headers,$params); использовать класс PHPMailer, то этой проблемы нет.
Это конечно решило проблему, но сейчас я хочу докопаться до причины.

Ведь класс PHPMailer в итоге как раз выполняет вызов mail.

Может быть предварительно задаёт какие либо настройки, сейчас буду копать. По данным которые передаются в body я критической разницы не заметил.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit