[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: отправка писем в ПХП
ArgentumZ87
Здравствуйте!

Такая ситуация: на сайте есть форма отправки письма админу.
Для страницы задан тег <meta http-equiv="Content-Type" content="text/html; charset=utf-8">.
Файл с хтмл сохранен как utf-8.
Пхп-скрипт, который отправляет почту, тоже в utf-8.

Результат - на Gmail приходи нормально, а на Rambler, например, приходит в битой кодировке проверка ÑвÑзи (Ñто Жека - не отвечать)

Для отправки использую функцию mail

$res = (mail($email, $theme, $text));


В чем может быть проблема? Не пойму куда копать.



Спустя 8 минут, 20 секунд (22.01.2011 - 15:11) alex12060 написал(а):
Решение проблемы кодировок

Я не зря выше привел пример отправки письма со словами латинского алфавита. Их любой почтовый клиент прочтет без труда. Но вот с русским алфавитом труднее. Русских кодировок существует огромное множество. И от того, насколько умело Вы перекодируете письмо, будет зависеть прочтет ли получатель его, или не будет возиться с установкой нужной кодировки и просто удалит его в корзину.

Кодировку письма задает заголовок 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);</evgen@mail.ru>


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

Теперь наше письмо придет в понятной для почтового клиента кодировке.

Но стоит отметить, что в некоторых случаях в правильной кодировке будет отображено только само письмо. Заголовок же так и останется нечитаемым. Связано это с тем, где расположен заголовок 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);</evgen@mail.ru>


Теперь это письмо прочтет любая почтовая программа!

Однако заметим, что это является извращением, и если это читает несколько кривых почтовых программ, которые нашли составители то это не значит что должны читать все.

Заголовки содержащие не ACSII символы должны быть закодированы с помощью base64 или mime кодирования, для этого нужно их офромить специальным образом - например для utf8 так:

$from = '=?utf-8?B?'.base64_encode($from).'?=';
$subject = '=?utf-8?B?'.base64_encode($subject).'?=';
$headers = "From: ".$from." <from@mail.ru>\n";

</from@mail.ru>

Для windows-1251 нужно "windows-1251" вместо utf-8

http://www.spravkaweb.ru/php/sovet/mail

Спустя 2 часа, 8 минут, 15 секунд (22.01.2011 - 17:19) inpost написал(а):
ArgentumZ87
irbis-team.com

Спустя 1 час, 2 минуты, 1 секунда (22.01.2011 - 18:21) ArgentumZ87 написал(а):
Цитата (alex12060 @ 22.01.2011 - 12:11)
Решение проблемы кодировок

Я не зря выше привел пример отправки письма со словами латинского алфавита. Их любой почтовый клиент прочтет без труда. Но вот с русским алфавитом труднее. Русских кодировок существует огромное м



alex12060, огромное тебе спасибо! Все работает laugh.gif

Спустя 7 месяцев, 27 дней, 22 часа, 35 минут, 50 секунд (20.09.2011 - 15:57) plyuh написал(а):
Цитата (ArgentumZ87 @ 22.01.2011 - 12:03)
Здравствуйте!

Такая ситуация: на сайте есть форма отправки письма админу.
Для страницы задан тег <meta http-equiv="Content-Type" content="text/html; charset=utf-8">.
Файл с хтмл сохранен как utf-8.
Пхп-скрипт, который отправляет почту, тоже в utf-8.

Результат - на Gmail приходи нормально, а на Rambler, например, приходит в битой кодировке проверка ÑвÑзи (Ñто Жека - не отвечать)

Для отправки использую функцию mail

$res = (mail($email, $theme, $text));


В чем может быть проблема? Не пойму куда копать.

не все блин почтовики понимают утф8
я чтоб не парится перекодировал все переменные и отправляю после перекодировки.
$message = iconv('UTF-8','windows-1251', $_POST['message']);
текст сообщения перекодирую из утф8 в 1251.

организовал у себя на сайте http://duet-agro31.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.