За последние 24 часа нас посетили 18617 программистов и 1600 роботов. Сейчас ищет 1001 программист ...

Не приходит письмо из формы обратной связи на сайте

Тема в разделе "Прочие вопросы по PHP", создана пользователем ATV, 6 фев 2013.

  1. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    Ребят, помогите разобраться, пожалуйста.
    Есть форма обратной связи на сайте:

    <!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>

    Все перепробовал, не приходит ВООБЩЕ никакого письма на почту. Ящики выбирал разные (и на рамблере и на яндексе и на майл.ру) - все без толку!((((

    Подскажите в чем ошибка?
     
  2. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    Ау!!! Мне кто нибудь тут поможет или я зря зарегился на форуме?
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а чо в журналах-то? ну и в еще одной переменной, которую вас скрипт устанавливает
     
  4. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    в каких журналах?
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    веб-сервера, ведомо, судя по словосочетанию "форма обратной связи на сайте"
     
  6. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    а где их искать то эти записи?
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    где скрипт запускается? в интернете хостинг или денвер на локальной машинке?
     
  8. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    в интернете на хостинге (хост - hostland.ru)
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тогда наверное в какой-нибудь хостерской админке.
     
  10. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    я на почтовом сервере поменял кодировку - все равно крякозябры приходят. пробовал на другой почтовый ящик отправить (на рамблер) - тоже самое

    Добавлено спустя 6 минут 15 секунд:
    вот какой у меня сейчас код и что он присылает:

    Код (Text):
    1.  
    2. <?php
    3.  
    4.   $to = 'email@mail.ru';
    5.   $subject = 'Письмо с мобильной версии сайта';
    6.  
    7.   $name = substr( $_POST['contactName'], 0, 64 ); // Получаем параметр имя из формы
    8.   $email = substr( $_POST['contactEmail'], 0, 64 ); // Получаем параметр Email из формы
    9.   $phone = substr( $_POST['contactPhone'], 0, 11 ); // Получаем телефон из формы
    10.   $message = substr( $_POST['contactMessage'], 0, 250 ); // Получаем сообщение из формы
    11.  
    12.   $body = "АВТОР:\r\n".$name."\r\n\r\n";
    13.   $body .= "E-MAIL:\r\n".$email."\r\n\r\n";
    14.   $body .= "ТЕЛЕФОН:\r\n".$phone."\r\n\r\n";
    15.   $body .= "СООБЩЕНИЕ:\r\n".$message;
    16.  
    17.   $theme   = '=?windows-1251?B?'.base64_encode('Письмо с мобильной версии сайта').'?=';
    18.   $headers = "From: Мобильный сайт <mobile.мойсайт.ru>\r\n";
    19.   $headers = $headers."Return-path: <".$email.">\r\n";
    20.   $headers = $headers."Content-type: text/plain; charset=\"windows-1251\"\r\n";
    21.   $headers = $headers."Content-Transfer-Encoding: 8bit\r\n\r\n";
    22.  
    23. mail($to, $subject, $body, $headers);
    24. ?>
    вот какое письмо приходит:
    Код (Text):
    1.  
    2. Тема: Письмо с мобильной версии сайта
    3. От: Мобильный сайт
    4. Кому    : email@mail.ru
    5.  
    6. АВТОР:
    7. админ
    8.  
    9. E-MAIL:
    10. test@mail.ru
    11.  
    12. ТЕЛЕФОН:
    13. 001
    14.  
    15. СООБЩЕНИЕ:
    16. проверка
     
  11. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    шедевр а не скрипт ))))

    говнокод.ру просто НЕРВНО курит в сторонке ))))
     
  12. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    хорош стебаться, лучше помогите разобраться и написать верный код
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    :D
    Код (PHP):
    1. $header="Content-type:text/plain;charset=utf-8\r\n";
    2. $header.="From: ".$email."\r\n";
    3. mail(,,,$header) 
    О как да?!)
     
  14. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    так тоже пробывал. в письме поменялось лишь то что с этой кодировкой utf-8 приходит форма с заполненными юзером полями на русском, а вот то что написано в теге $body - крякозябры.

    Добавлено спустя 6 минут 34 секунды:
    Код (Text):
    1. <?php
    2.  
    3. $to = 'мой@адрес.ru';
    4. $subject = 'Mobile.мойсайт.ru';
    5.  
    6. $name = substr( $_POST['contactName'], 0, 64 );
    7. $email = substr( $_POST['contactEmail'], 0, 64 );
    8. $phone = substr( $_POST['contactPhone'], 0, 11 );
    9. $message = substr( $_POST['contactMessage'], 0, 250 );
    10.  
    11. $body = "Name: ".$name."\r\n\r\n";
    12. $body .= "Phone: ".$phone."\r\n\r\n";
    13. $body .= "E-Mail: ".$email."\r\n\r\n";
    14. $body .= "Message: ".$message;
    15.  
    16. $headers = $headers."MIME-Version: 1.0";
    17. $headers = $headers."Content-Transfer-Encoding: 8bit";
    18. $headers = $headers."Content-Type: text/html; charset=windows-1251";
    19. $headers = "From: mobile.antonterentyev.ru\r\n";
    20. $headers = $headers."Return-path: <".$email.">\r\n";
    21.  
    22. mail($to, $subject, $body, $headers);
    23. ?>
    в настройках почтового сервера установил кодировку utf-8 и теперь содержимое формы (поля кот. заполняет пользователь) приходят на русском. а вот поля что заданы в теге $body (я их написал на английском) на русском не отображаются, только крякозябры
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вы вообще врубаетесь что это разные ситуации? "нихрена не работает" и "нихрена не работает правильно".
     
  16. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    ну напишите мне рабочий код, чтобы все было на русском. я не такой вот умный, как вы!

    Добавлено спустя 4 минуты 7 секунд:
    у меня вот такой код получился:

    Код (Text):
    1. <?php
    2.  
    3. $to = 'мой@адрес.ru';
    4. $subject = 'Mobile.мойсайт.ru';
    5.  
    6. $name = substr( $_POST['contactName'], 0, 64 );
    7. $email = substr( $_POST['contactEmail'], 0, 64 );
    8. $phone = substr( $_POST['contactPhone'], 0, 11 );
    9. $message = substr( $_POST['contactMessage'], 0, 250 );
    10.  
    11. $body = "Name: ".$name."\r\n\r\n";
    12. $body .= "Phone: ".$phone."\r\n\r\n";
    13. $body .= "E-Mail: ".$email."\r\n\r\n";
    14. $body .= "Message: ".$message;
    15.  
    16. $headers = $headers."MIME-Version: 1.0";
    17. $headers = $headers."Content-Transfer-Encoding: 8bit";
    18. $headers = $headers."Content-Type: text/html; charset=windows-1251";
    19. $headers = "From: mobile.мойсайт.ru\r\n";
    20. $headers = $headers."Return-path: <".$email.">\r\n";
    21.  
    22. mail($to, $subject, $body, $headers);
    23. ?>
    поменял кодировку на почтовом сервере на utf-8 и все что заполняет пользователь приходит на русском.
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это я уже понял - я вам сказал что вы обозначили задачу "не отправляются письма" (тема как называется? "НЕ ПРИХОДИТ письмо...") и я начал разбор полетов почему не ходит почта, а потом вдруг выяснилось что почта-то ходит, только кодировка не та - вы в ответ затронули мои умственные способности. но я вас прощаю.

    относительно рабочего скрипта. у вас мешанина с кодировками. все что вам нужно было понять - у вас сервер в юникоде работает, а скрипты жуют винсипи-1251. когда вы тупо поменяли заголовок письма - достаточно было конвертнуть еще и файл генератор письма - тогда все бы было юникодом и пришло бы без крякозябр.
     
  18. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    вообще не понял о чем вы. поясните популярно, пожалуйста.

    Добавлено спустя 52 секунды:
    простите, сорвался(( уже ни сил ни терпения не хватает.
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    попробую.
    вы отправляете форму (листинг 1) скрипту (листинг, видимо 3) и получаете письмо (листинг 4). форма отправляется в юникоде - за это сервер ответил, не смотря на ваши попытки прописать сипи1251. когда вы переписали заголовок письма на юникод - тело письма пришло в норму, но при этом остальная часть - не которую пользователь отправил и усилиями сервака это произошло в юникоде, а та что генерируется скриптом - перестала отображаться правильно. потому что файл остался в виндовой кодировке.
    что можно сделать? поменять кодировку файла отправки - сделать юникод. тогда пользовательские данные (усилиями сервера) придут в юникоде, служебные данные скрипт запишет в юникоде и отправит письмо в котором прописана юникод кодировка. я почти на 100% уверен что пользователь получит правильное письмо.
     
  20. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    можно все тоже самое, но только ввиде готового php-кода на примере моего? я в пхп не бум-бум, поэтому ни слова не понял из того, что написано.
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  22. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    т.е. в строке поменять надо с этого:
    Код (Text):
    1. $headers = $headers."Content-Type: text/html; charset=windows-1251";
    на это:
    Код (Text):
    1. $headers = $headers."Content-Type: text/html; charset=utf-8";
    и потом весь пхп-файл сохранить в кодировке utf-8?
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  24. ATV

    ATV Активный пользователь

    С нами с:
    6 фев 2013
    Сообщения:
    36
    Симпатии:
    0
    вот код который я сохранил в utf-8:
    Код (Text):
    1.  
    2. <?php
    3.  
    4. $to = 'мой@адрес.ru';
    5. $subject = 'Письмо с мобильного сайта';
    6.  
    7. $name = substr( $_POST['contactName'], 0, 64 );
    8. $email = substr( $_POST['contactEmail'], 0, 64 );
    9. $phone = substr( $_POST['contactPhone'], 0, 11 );
    10. $message = substr( $_POST['contactMessage'], 0, 250 );
    11.  
    12. $body = "Имя: ".$name."\r\n\r\n";
    13. $body .= "Телефон: ".$phone."\r\n\r\n";
    14. $body .= "E-Mail: ".$email."\r\n\r\n";
    15. $body .= "Текст: ".$message;
    16.  
    17. $headers = $headers."MIME-Version: 1.0";
    18. $headers = $headers."Content-Transfer-Encoding: 8bit";
    19. $headers = $headers."Content-Type: text/html; charset=utf-8";
    20. $headers = "From: Мобильный сайт <mobile.мойсайт.ru>\r\n";
    21. $headers = $headers."Return-path: <".$email.">\r\n";
    22.  
    23. mail($to, $subject, $body, $headers);
    24. ?>
    и вот что пришло на почту (кодировку поставил ту же - utf-8):
    Код (Text):
    1. Тема    ?????? ? ?????????? ?????
    2. От    ????????? ????
    3. Кому      мой@адрес.ru
    4.  
    5. ???: админ
    6.  
    7. ???????: 123
    8.  
    9. E-Mail: test@mail.ru
    10.  
    11. ?????: проверка!
    как убрать знаки вопроса и поставить русские буквы?
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это вин1251 в юникоде пришел... значит на каком-то этапе вы что-то еще успели сделать и мое "простое решение" перестало работать. где что еще поменяли?