Консультация № 69824
07.01.2007, 02:37
0.00 руб.
0 1 1
Здравствуйте!

Я вот отправляю сообщение из php на мыло. Это обычный текст, но приходит кракозяблики (кодировка не указана).

Пожалуйста подскажите что нужно написать, чтобы всё было правильно для обычного текстового сообщения?
Как указать нужную кодировку, тип и чо там ещё нужно?

Обсуждение

Неизвестный
07.01.2007, 03:12
общий
это ответ
Здравствуйте, Талипов А Н!

Синтаксис функции mail():
bool mail(string $to, string $subject, string $msg [, string $header]);

Функция mail() посылает письмо с темой $subject и содержанием $msg по адресу $to.
Если Вы хотите, чтобы письмо ушло по нескольким адресам, разделите их пробелами.
Само сообщение может быть многострочным. Для перехода на новую строку поставьте знак перехода на новую строку "\n" в конце каждой строки

В четвертом необязательном параметре $header можно указать заголовки нашего сообщения.

Кодировку письма задает заголовок Content-type:
$header="From: "\Evgen"\ <evgen@mail.ru>";
$header.="Content-type: text/plain; charset="windows-1251"";
$subject="Тема письма";
$msg="Сторака 1\nСтрока 2\nСтрока 3";
mail("name@mail.ru", $subject, $msg, $header);

В заголовке мы указали, что тип письма будет простой текст, а кодировка - Windows.

Как топравить письмо в формате HTML смотрите в приложении.

Приложение:
Но стоит отметить, что в некоторых случаях в правильной кодировке будет отображено только само письмо. Заголовок же так и останется нечитаемым. Связано это с тем, где расположен заголовок Content-type относительно заголовка Subject, который и содержит тему письма. Дело в том, что существуют почтовые программы, которые понимают заголовок Content-type, но не понимают русский текст в поле Subject, если это поле стоит до Content-type. В то же время, другие почтовые программы обязывают нас задавать Content-type последним заголовком в списке. Чтобы обойти эти препятствия, можно разместить поле Content-type сразу в начале и в конце списка заголовков: $subject="Тема письма";$header="Content-type: text/plain; charset="windows-1251"";$header.="From: "\Evgen"\ <evgen@mail.ru>";$header.="Subject: $subject";$header.="Content-type: text/plain; charset="windows-1251"";$msg="Сторака 1\nСтрока 2\nСтрока 3";mail("name@mail.ru", $subject, $msg, $header);Теперь это письмо прочтет любая почтовая программа! Отправка письма в HTML-видеДля отправки письма в HTML-виде достаточно в заголовке Content-type указать тип документа не text/plain (простой текст), а text/html (html-текст). А само письмо записать в html-виде: $subject="Тема письма";$header="Content-type: text/html; charset="windows-1251"";$header.="From: "\Evgen"\ <evgen@mail.ru>";$header.="Subject: $subject";$header.="Content-type: text/html; charset="windows-1251"";$msg="<body><li>Сторака 1<li>Сторака 2<li>Сторака 3</body>";mail("name@mail.ru", $subject, $msg, $header);
Форма ответа