Ребят, помогите разобраться, пожалуйста. Есть форма обратной связи на сайте: <!doctype html> <head> <meta charset="windows-1251"></head> <body> <form action="send-email.php" method="POST" data-enhance="false" /> <div class="groupBox"> <ul> <li> <input type="text" placeholder="Name" required name="contactName" id="contactName" /> </li> <li> <input type="email" placeholder="Email" required name="contactEmail" id="contactEmail" /> </li> <li> <input type="tel" placeholder="Phone" name="contactPhone" id="contactPhone" /> </li> <li> <textarea placeholder="Message" required name="contactMessage" id="contactMessage"></textarea> </li> </ul> <input type="submit" class="button buttonStrong right" value="Отправить" name="buttonSubmit" value="submit" /> <div class="clearfix"></div> </div> </form> <script src="js/script.js"></script> </body> </html> Файл скрипта проверки формы на Jquery: http://www29.zippyshare.com/v/43446505/file.html и есть PHP файл отправки письма на почту (send-email.php): <?php session_start(); $admin = ) ) { $name = substr( $_POST['contactName'], 0, 64 ); $email = substr( $_POST['contactEmail'], 0, 64 ); $subject = substr( $_POST['contactPhone'], 0, 11 ); $message = substr( $_POST['contactMessage'], 0, 250 ); $body = "АВТОР:\r\n".$name."\r\n\r\n"; $body .= "E-MAIL:\r\n".$email."\r\n\r\n"; $body .= "ТЕМА:\r\n".$subject."\r\n\r\n"; $body .= "СООБЩЕНИЕ:\r\n".$message; $body = quoted_printable_encode( $body ); $theme = '=?windows-1251?B?'.base64_encode('Заполнена форма на сайте').'?='; $headers = "From: ".$_SERVER['SERVER_NAME']." <".$email.">\r\n"; $headers = $headers."Return-path: <".$email.">\r\n"; $headers = $headers."Content-type: text/plain; charset=\"windows-1251\"\r\n"; $headers = $headers."Content-Transfer-Encoding: quoted-printable\r\n\r\n"; if ( mail($admin, $theme, $body, $headers) ) $_SESSION['success'] = true; else $_SESSION['success'] = false; header( 'Location: '.$_SERVER['PHP_SELF'] ); die(); } function quoted_printable_encode ( $string ) { // rule #2, #3 (leaves space and tab characters in tact) $string = preg_replace_callback ( '/[^\x21-\x3C\x3E-\x7E\x09\x20]/', 'quoted_printable_encode_character', $string ); $newline = "=\r\n"; // '=' + CRLF (rule #4) // make sure the splitting of lines does not interfere with escaped characters // (chunk_split fails here) $string = preg_replace ( '/(.{73}[^=]{0,3})/', '$1'.$newline, $string); return $string; } function quoted_printable_encode_character ( $matches ) { $character = $matches[0]; return sprintf ( '=%02x', ord ( $character ) ); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Письмо отправлено!</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> </body> </html> Все перепробовал, не приходит ВООБЩЕ никакого письма на почту. Ящики выбирал разные (и на рамблере и на яндексе и на майл.ру) - все без толку!(((( Подскажите в чем ошибка?
я на почтовом сервере поменял кодировку - все равно крякозябры приходят. пробовал на другой почтовый ящик отправить (на рамблер) - тоже самое Добавлено спустя 6 минут 15 секунд: вот какой у меня сейчас код и что он присылает: Код (Text): <?php $to = 'email@mail.ru'; $subject = 'Письмо с мобильной версии сайта'; $name = substr( $_POST['contactName'], 0, 64 ); // Получаем параметр имя из формы $email = substr( $_POST['contactEmail'], 0, 64 ); // Получаем параметр Email из формы $phone = substr( $_POST['contactPhone'], 0, 11 ); // Получаем телефон из формы $message = substr( $_POST['contactMessage'], 0, 250 ); // Получаем сообщение из формы $body = "АВТОР:\r\n".$name."\r\n\r\n"; $body .= "E-MAIL:\r\n".$email."\r\n\r\n"; $body .= "ТЕЛЕФОН:\r\n".$phone."\r\n\r\n"; $body .= "СООБЩЕНИЕ:\r\n".$message; $theme = '=?windows-1251?B?'.base64_encode('Письмо с мобильной версии сайта').'?='; $headers = "From: Мобильный сайт <mobile.мойсайт.ru>\r\n"; $headers = $headers."Return-path: <".$email.">\r\n"; $headers = $headers."Content-type: text/plain; charset=\"windows-1251\"\r\n"; $headers = $headers."Content-Transfer-Encoding: 8bit\r\n\r\n"; mail($to, $subject, $body, $headers); ?> вот какое письмо приходит: Код (Text): Тема: Письмо с мобильной версии сайта От: Мобильный сайт Кому : email@mail.ru АВТОР: админ E-MAIL: test@mail.ru ТЕЛЕФОН: 001 СООБЩЕНИЕ: проверка
Код (PHP): $header="Content-type:text/plain;charset=utf-8\r\n"; $header.="From: ".$email."\r\n"; mail(,,,$header) О как да?!)
так тоже пробывал. в письме поменялось лишь то что с этой кодировкой utf-8 приходит форма с заполненными юзером полями на русском, а вот то что написано в теге $body - крякозябры. Добавлено спустя 6 минут 34 секунды: Код (Text): <?php $to = 'мой@адрес.ru'; $subject = 'Mobile.мойсайт.ru'; $name = substr( $_POST['contactName'], 0, 64 ); $email = substr( $_POST['contactEmail'], 0, 64 ); $phone = substr( $_POST['contactPhone'], 0, 11 ); $message = substr( $_POST['contactMessage'], 0, 250 ); $body = "Name: ".$name."\r\n\r\n"; $body .= "Phone: ".$phone."\r\n\r\n"; $body .= "E-Mail: ".$email."\r\n\r\n"; $body .= "Message: ".$message; $headers = $headers."MIME-Version: 1.0"; $headers = $headers."Content-Transfer-Encoding: 8bit"; $headers = $headers."Content-Type: text/html; charset=windows-1251"; $headers = "From: mobile.antonterentyev.ru\r\n"; $headers = $headers."Return-path: <".$email.">\r\n"; mail($to, $subject, $body, $headers); ?> в настройках почтового сервера установил кодировку utf-8 и теперь содержимое формы (поля кот. заполняет пользователь) приходят на русском. а вот поля что заданы в теге $body (я их написал на английском) на русском не отображаются, только крякозябры
вы вообще врубаетесь что это разные ситуации? "нихрена не работает" и "нихрена не работает правильно".
ну напишите мне рабочий код, чтобы все было на русском. я не такой вот умный, как вы! Добавлено спустя 4 минуты 7 секунд: у меня вот такой код получился: Код (Text): <?php $to = 'мой@адрес.ru'; $subject = 'Mobile.мойсайт.ru'; $name = substr( $_POST['contactName'], 0, 64 ); $email = substr( $_POST['contactEmail'], 0, 64 ); $phone = substr( $_POST['contactPhone'], 0, 11 ); $message = substr( $_POST['contactMessage'], 0, 250 ); $body = "Name: ".$name."\r\n\r\n"; $body .= "Phone: ".$phone."\r\n\r\n"; $body .= "E-Mail: ".$email."\r\n\r\n"; $body .= "Message: ".$message; $headers = $headers."MIME-Version: 1.0"; $headers = $headers."Content-Transfer-Encoding: 8bit"; $headers = $headers."Content-Type: text/html; charset=windows-1251"; $headers = "From: mobile.мойсайт.ru\r\n"; $headers = $headers."Return-path: <".$email.">\r\n"; mail($to, $subject, $body, $headers); ?> поменял кодировку на почтовом сервере на utf-8 и все что заполняет пользователь приходит на русском.
это я уже понял - я вам сказал что вы обозначили задачу "не отправляются письма" (тема как называется? "НЕ ПРИХОДИТ письмо...") и я начал разбор полетов почему не ходит почта, а потом вдруг выяснилось что почта-то ходит, только кодировка не та - вы в ответ затронули мои умственные способности. но я вас прощаю. относительно рабочего скрипта. у вас мешанина с кодировками. все что вам нужно было понять - у вас сервер в юникоде работает, а скрипты жуют винсипи-1251. когда вы тупо поменяли заголовок письма - достаточно было конвертнуть еще и файл генератор письма - тогда все бы было юникодом и пришло бы без крякозябр.
вообще не понял о чем вы. поясните популярно, пожалуйста. Добавлено спустя 52 секунды: простите, сорвался(( уже ни сил ни терпения не хватает.
попробую. вы отправляете форму (листинг 1) скрипту (листинг, видимо 3) и получаете письмо (листинг 4). форма отправляется в юникоде - за это сервер ответил, не смотря на ваши попытки прописать сипи1251. когда вы переписали заголовок письма на юникод - тело письма пришло в норму, но при этом остальная часть - не которую пользователь отправил и усилиями сервака это произошло в юникоде, а та что генерируется скриптом - перестала отображаться правильно. потому что файл остался в виндовой кодировке. что можно сделать? поменять кодировку файла отправки - сделать юникод. тогда пользовательские данные (усилиями сервера) придут в юникоде, служебные данные скрипт запишет в юникоде и отправит письмо в котором прописана юникод кодировка. я почти на 100% уверен что пользователь получит правильное письмо.
можно все тоже самое, но только ввиде готового php-кода на примере моего? я в пхп не бум-бум, поэтому ни слова не понял из того, что написано.
вот сюда - http://php.ru/forum/viewtopic.php?p=347343#p347343 посмотрите. вот на этом этапе смените кодировку самого файла. и все.
т.е. в строке поменять надо с этого: Код (Text): $headers = $headers."Content-Type: text/html; charset=windows-1251"; на это: Код (Text): $headers = $headers."Content-Type: text/html; charset=utf-8"; и потом весь пхп-файл сохранить в кодировке utf-8?
вот код который я сохранил в utf-8: Код (Text): <?php $to = 'мой@адрес.ru'; $subject = 'Письмо с мобильного сайта'; $name = substr( $_POST['contactName'], 0, 64 ); $email = substr( $_POST['contactEmail'], 0, 64 ); $phone = substr( $_POST['contactPhone'], 0, 11 ); $message = substr( $_POST['contactMessage'], 0, 250 ); $body = "Имя: ".$name."\r\n\r\n"; $body .= "Телефон: ".$phone."\r\n\r\n"; $body .= "E-Mail: ".$email."\r\n\r\n"; $body .= "Текст: ".$message; $headers = $headers."MIME-Version: 1.0"; $headers = $headers."Content-Transfer-Encoding: 8bit"; $headers = $headers."Content-Type: text/html; charset=utf-8"; $headers = "From: Мобильный сайт <mobile.мойсайт.ru>\r\n"; $headers = $headers."Return-path: <".$email.">\r\n"; mail($to, $subject, $body, $headers); ?> и вот что пришло на почту (кодировку поставил ту же - utf-8): Код (Text): Тема ?????? ? ?????????? ????? От ????????? ???? Кому мой@адрес.ru ???: админ ???????: 123 E-Mail: test@mail.ru ?????: проверка! как убрать знаки вопроса и поставить русские буквы?
это вин1251 в юникоде пришел... значит на каком-то этапе вы что-то еще успели сделать и мое "простое решение" перестало работать. где что еще поменяли?