Отправка сообщения с сайта на e-mail

В очередной раз встретил на форуме сообщение: “Скажите, как сделать скрипт на php для отправки на мыло через сайт. Например, я ввожу на сайте в поля нужный текст и нажимаю “Отправить”. После чего текст отправляется кому-нибудь на e-mail. Очень нужно!“. Быстро набросал простенький скрипт отправки сообщений на e-mail. Когда в следующий раз услышу такой вопрос - буду давать ссылку на эту страницу.

Для отправки почтового сообщения создадим HTML-форму, состоящую из трех текстовых полей для имени автора name, его e-mail адреса email, темы сообщения subject и текстовой области message для ввода содержимого письма.

Письмо будем отправлять по адресу администратора сайта $admin = ‘admin@mail.ru’

<?php
session_start();
$admin = 'admin@mail.ru';

if ( isset( $_POST['sendMail'] ) ) {
  $name  = substr( $_POST['name'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $subject = substr( $_POST['subject'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );
 
  $error = '';
  if ( empty( $name ) ) $error = $error.'<li>Не заполнено поле "Имя"</li>';
  if ( empty( $email ) ) $error = $error.'<li>Не заполнено поле "E-mail"</li>';
  if ( empty( $subject ) ) $error = $error.'<li>Не заполнено поле "Тема"</li>';
  if ( empty( $message ) ) $error = $error.'<li>Не заполнено поле "Сообщение"</li>';
  if ( !empty( $email ) and !preg_match( "#^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,6}$#i", $email ) )
    $error = $error.'<li>поле "E-mail" должно соответствовать формату somebody@somewhere.ru</li>';
  if ( !empty( $error ) ) {
    $_SESSION['sendMailForm']['error']   = '<p>При заполнении формы были допущены ошибки:</p><ul>'.$error.'</ul>';
    $_SESSION['sendMailForm']['name']    = $name;
    $_SESSION['sendMailForm']['email']   = $email;
    $_SESSION['sendMailForm']['subject'] = $subject;
    $_SESSION['sendMailForm']['message'] = $message;
    header( 'Location: '.$_SERVER['PHP_SELF'] );
    die();
  }
 
  $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>

<?php
if ( isset( $_SESSION['success'] ) ) {
  if ( $_SESSION['success'] )
    echo '<p>Письмо успешно отправлено</p>';
  else
    echo '<p>Ошибка при отправке письма</p>';
  unset( $_SESSION['success'] );
}
if ( isset( $_SESSION['sendMailForm'] ) ) {
  echo $_SESSION['sendMailForm']['error'];
  $name    = htmlspecialchars ( $_SESSION['sendMailForm']['name'] );
  $email   = htmlspecialchars ( $_SESSION['sendMailForm']['email'] );
  $subject = htmlspecialchars ( $_SESSION['sendMailForm']['subject'] );
  $message = htmlspecialchars ( $_SESSION['sendMailForm']['message'] );
  unset( $_SESSION['sendMailForm'] );
} else {
  $name    = '';
  $email   = '';
  $subject = '';
  $message = '';
}
?>

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<table>
<tr><td>Имя:</td><td><input type="text" name="name" maxlength="64" value="<?php echo $name ?>" /></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email" maxlength="64" value="<?php echo $email ?>" /></td></tr>
<tr><td>Тема:</td><td><input type="text" name="subject" maxlength="64" value="<?php echo $subject ?>" /></td></tr>
<tr><td>Сообщение:</td><td><textarea name="message" rows="5" cols="30"><?php echo $message ?></textarea></td></tr>
<tr><td>&nbsp;</td><td><input type="submit" name="sendMail" value="Отправить" /></td></tr>
</table>
</form>

</body>
</html>

Чтобы понять, зачем здесь сессия и редирект после вызова функции mail(), надо прочитать статью Обработка ошибочного заполнения формы.

Попробуйте убрать редирект и поработать со скриптом. Во-первых, если после отправки формы нажать Refresh, то браузер выдаст сообщение о том, что страницу обновить невозможно без повторной отсылки данных. Во-вторых, если после отправки сообщения уйти на другую страницу, то при нажатии на кнопку Back (т.е. при попытке вернуться на POST-страницу) опять будет выведено сообщение о необходимости повторной отсылки данных. Мало того, что это совершенно нелогично и неудобно с точки зрения пользователя (он ведь уже отправил данные!), так ещё и если он в этот момент нажмёт “OK”, то данные формы будут отправлены повторно. Соответственно, и письмо будет отправлено еще раз.

Проблем этих можно избежать, если после обработки POST-запроса сразу же делать GET-редирект.

Теперь по поводу сессии. В случае ошибочного заполнения пользователем формы, хорошим тоном считается показать ему эту же форму, заполненною введёнными данными (чтобы пользователю не пришлось заполнять всё заново) и снабжённую сообщением об ошибке. При этом ошибочно введённые данные передаются через механизм сессий.

Ссылки по теме:

Комментариев: 75

  1. Аня:

    Огромнейшее спасибо!!! Неделю лазила по инету, кучу всего перепробовала, и именно этот способ заработал!!!!!

  2. trias:

    спасибо большое.
    А как добавить в форму защиту от спама?

  3. admin:

    trias, я уже писал, как добавить защиту от спама:
    Защитное изображение для HTML-формы
    Или вот еще вариант - CAPTCHA

  4. Поисковый робот:

    Ищу что-то подобное, но не совсем.
    Идея: существует множество скриптов добавления страницы в закладки, которые берут 2 параметра страницы: url и title и подставляют их в ссылку, отправляющуюся, например, на memori.ru. При нажатии кнопки “Memori” мы попадаем на страницу memori.ru с формой добавления, в которой url и title уже заполнены.

    Возможно ли с помощью скрипта сделать заставить те же url и title текущей страницы так же по нажатию одной кнопки автоматически вставляться в форму отправки email редактору сайта? То есть, нажимаем одну кнопку и на попадаем на страницу с формой, в которой поля со ссылкой и title уже заполнены. Осталось только нажать “Отправить”.

  5. admin:

    Поисковый робот, не уверен, что понял правильно, но в общем-то ничего сложного. Кнопка “Написать админу” - это кнопка отправки формы, которая имеет два скрытых поля - url и title. Мы их должны заполнить при формировании страницы. Ну а при формировании страницы, где расположена форма для связи с админом, надо проверить, переданы нам методом GET (или POST) переменные $_GET['url'] и $_GET['title']? Если да - вставляем полученные значения в соответствующие поля. Тут мы все делаем на стороне сервера.
    Еще один вариант: кнопка “Написать админу” сама по себе - т.е. расположена вне формы. Но она имеет атрибут onclick, вызывающий некую JavaScript-функцию, которая записывает в cookie URL страницы (document.location.href) и title страницы (document.title) а потом перенаправляет посетителя на страницу, где расположена форма для связи с админом (document.location.href=”form_page”). На странице формы связи по событию onload проверяем наличие cookie с url и title и записываем их в соответствующие поля формы. Здесь все действия выполняются на стороне клиента.
    Можно совместить эти два способа - что-то сделать на стороне сервера, что-то на стороне клиента.

  6. Поисковый робот:

    Спасибо, всё именно так, как и предполагалось.

  7. Константин:

    вопрос: Проверочные сообщения типа “не заполнено поле …” высвечивается слева сверху странички. Как можно “разорвать” скрипт, так, чтоб это сообщение было в таблице например на месте сообщения “Письмо успешно отправлено”.

  8. admin:

    Константин, Вы правы, действительно неудобно. Исправил. А вообще, сообщение об ошибках при заполнении формы можно вывести в любом месте страницы. Для этого в нужном месте вставляем

    if ( isset( $_SESSION['sendMailForm'] ) ) {
      echo $_SESSION['sendMailForm']['error'];
    }
  9. CharnaD:

    Ну во-первых mail не работает в винде. А во-вторых я бы использовал скрипт Sendmail, он простой и удобный.

  10. admin:

    CharnaD, ну этот скрипт для работы на хостинге, и там проблем с mail() нет. И это все-таки учебный пример - основа для своего скрипта.

  11. vadim:

    Скопировал ваш код в файл form.php
    форма выдает “Ошибка при отправке письма”
    помогите пожалуйста разобраться, из-за чего такое может быть, ничего в этом не понимаю, форма нужна работающая край как…

  12. admin:

    vadim, я не ясновидящий. В .htaccess добавляем
    display_errors = On
    error_reporting = E_ALL
    и смотрим, какие ошибки выдает PHP. Вообще, такое сообщение должно быть, если не работает функция mail(). Какой-нибудь бесплатный хостинг?

  13. vadim:

    ну да, бесплатный, http://www.wallst.ru...
    пока нет платного хостинга, сначала нужно сделать и показать
    я понял, буду искать хост с поддержкой sendMail(), спасибо

  14. Natalia:

    Помогите пожалуйста! У меня только ваша форма работает из всех, что пробовала.
    Но, отправляет большое количество одинаковых сообщений за клик. Выдает ошибку:
    CGI Error
    The specified CGI application misbehaved by not returning a complete set of HTTP headers.
    Подскажите пожалуйста в чем проблема.

  15. KA6AH4UK:

    Прива! Скачал скрипт, первую половину поместил файл form.php, а вторую в mail.htm, когда ввожу все данные нажимаю кнопку отправить, открывается пустое окно и на почту ничего не приходит, в чем может быть дело!!!!

  16. admin:

    KA6AH4UK, сама форма и обработчик содержат PHP-код, поэтому надо либо изменить расширение обработчика на mail.php, либо создать .htaccess следующего содержания
    RemoveHandler .html .htm
    AddType application/x-httpd-php .php .html .htm
    чтобы заставить PHP обрабатывать HTML-файлы. Еще один момент - если что-то не работает, надо в первую очередь смотреть, какие ошибки выдает PHP-скрипт. Для этого добавляем в .htaccess
    php_flag display_errors on
    php_value error_reporting 2047

  17. Слава:

    Добрый день,
    прежде всего огромное спасибо за форму, сам бы “с нуля” ни за что не написал:)

    У меня есть вопрос: иногда случается, что мои клиенты, заполнив форму, жмут “отправить”, а за то время пока они писали (мне пишут комментарии, так что это может занять много время) что-то произошло с подключением или еще что, и форма выдает: “сообщение не отправлено, попробуйте позднее” и при этом ОБНУЛЯЕТ все данные! Можно ли сделать так, чтобы в случае ошибки отправки формы данные не обнулялись?
    С уважением,
    Вячеслав

  18. Виталий:

    Спасибо большое! Перепробовал не один десяток форм - не работала ни одна, а Ваша работает! Пример работы здесь: http://myreklama.net/contacts.html

  19. Виталий:

    Слегка подправил формы…

  20. vsbn:

    Возможно ли, в принципе, написать скрипт, который мог бы отправлять сообщение с сайта не через SMTP хостинга, а через доступный для авторизации SMTP другого сервера?

  21. Икаруз:

    Здравствуйте. У меня возникла проблемка. Я сам новичек в этом деле, многого не понимаю. Но…
    Вопрос:
    Можно ли в вашем примере добавить, скажем дополнительные поля? методом копипаста, и изменением имен переменных?..
    т.е. у вас для полей есть $name,$email,$message,$subject.. и вслед за ними добавить $name1, $email1 и т.д. Естественно добавляя везде в коде аналагичные “добавления”?..
    А то я подобное замутил, и чего то не работает :) ошибку выдает…

    требуемый результат:
    В общем я хотел переделать вашу форму под отправку заказов на Е-мыло, общей сложностью в 17 заполняемых полей “толщиной”…
    Если вы как то можите что-то посоветовать, или даже проверить мое “художество” в переделки скрипта - был бы очень и очень благодарен.

    З.ы
    И еще маленький, но жутко глупый вопрос - эта форма работает, только если залить ее файлом *.php на хост?..

  22. admin:

    Икаруз, разумеется, можно добавить дополнительные поля. Если что-то не работает, можно это обсудить на форуме… Форма будет работать, если залить ее файлом *.php. При желании можно заставить PHP обрабатывать и HTML-файлы.

  23. Антон:

    Здравствуйте. Я немного видоизменил форму убрав из нее отправку на email. Т.е. на первой странице пользователь вводит свои данные, которые соответственно проверяются и в случаи правильного заполнения, собранные данные надо отобразить на др. странице напр. в виде таблицы, откуда они уже могут быть отправлены на емаил. Но после успешной проверки эти данные, почему то не отображаются на сл. странице!!! В основной файл я добавил сл.:
    if ( $_SESSION['success'] = true )
    $_SERVER['PHP_SELF'] = “2.php”;
    else
    $_SESSION['success'] = false;
    header( ‘Location: ‘.$_SERVER['PHP_SELF'] );
    die();
    Ну а файл 2.php содержит сл.:
    $name = $_POST['name'];
    $email = $_POST['email'];

    echo “Имя $name”;
    echo “Email $email”;
    Я в PHP пока мало чего понимаю, да и он гораздо сложнее HTML и CSS, так что потратив несколько дней в пустую остается наедятся только на вашу помощь.
    С уважением Антон

  24. Рустам:

    Три часа искал простой, и что самое главное, рабочий вариант подобного скрипта, и, наконец, нашел :-) Большое Вам спасибо за проделанную работу!

  25. Юкей:

    Добрый день, нужна точно такая же форма как на странице http://chehova7.spb.ru/request.php
    можно ли использовать ваш скрипт?
    Благодарю за ответ!

  26. Андрей:

    Спасибо за скрипт. Я нашел за 10 секунд :)
    Есть маленький вопрос, а можно сделать так чтобы тема сообщения автоматически ставилась определенная?

  27. Максим:

    У меня выдает ошибку! Ненравистя ему чет session_start().
    Посмотрите пожалуйста на http://www.adm-okha.ru/obrgr.php, подскажите в чем проблема.
    Спасибо.

  28. admin:

    Максим, думаю, Вам будет интересно прочитать заметку:
    Как избавиться от сообщений “headers already sent”

  29. Максим:

    Я прочитал по ссылке, но так как я не очень силен в PHP мне это мало помогло. Могу ли я Вам отправить код своей странички, чтоб Вы посмотрели и подсказали как конкретно расположить код?
    Спасибо.

  30. admin:

    Могу ли я Вам отправить код своей странички, чтоб Вы посмотрели и подсказали как конкретно расположить код?
    Выкладывайте свой код на форуме, обсудим.

  31. Андрей:

    Здравствуйте! Вопервых огромное спасибо за ваш код. Работает, переделке поддается легко хотя я первый раз этим занимаюсь. Есть один вопрос. У меня форма содержит списки т.е.
    Марка и модель *
    <SELECT style=”WIDTH: 250px” name=marka value=”" AUDI 100 и так далее очень много марок в конце что надо поменять чтобы форма опрашивалась по выбраному из списка и отправляла то что выбрал пользователь. Заранее благодарен.

  32. admin:

    Андрей, если честно - ничего не понял. Что означает фраза “форма опрашивалась по выбраному из списка“? Элемент <select> не имеет атрибута value. Давайте обсудим на форуме, и выражайтесь, пожалуйста, не так сумбурно.

  33. Андрей:

    Прошу прощенья я не очень разбираюсь в этих правилах форумов и т.д. вопрос мой снят я все сделал за формулу или скрипт или как его еще назвать, еще раз огромное спасибо. Есть другой ворпрос!? Только я непойму где то место, “Форум” (что такое форум я знаю) на котором надо его задавать ) правда )я непонимаю!
    P.S. А вопрос сумбурный потому что я ничего в этом не понимал вчера.

  34. awega777:

    Здравствуйте,
    За скрипт спасибо. Создал форму, mail.php, скопировал все на http://ftp. Все работает, то есть письмо приходит на почту , но вместо букв приходят иероглифы. На всех страницах была похожая проблема - я вместо charset=usf-8, поставил charset=windows-1251. И проблема отпала. Как быть? Как сделать так, чтобы на почту приходило сообщение на русском.
    PS Я не кодер, я чайник - использую дримвивер цс4. Страница сайта - http://www.shopkirov.ru/Zakaz/19171.html
    Спасибо

  35. admin:

    awega777, я мало что понял из Ваших объяснений. То Вы говорите - есть проблема, и тут же - что проблема пропала. Вы уж как-то определитесь. Но ясно, что проблема в кодировке. Скорее всего, обработчик формы, файл mail.php сохранен не в кодировке windows-1251, а в кодировке utf-8.

  36. awega777:

    С кодировкой разобрался. Возникла другая проблема. Заполняю всю форму, отправляю. На почту приходит незаполненными два поля. Когда уже в открывшемся поле (там где написано “Письмо успешно отправлено”) повторно все вбиваю и отправляю - все в порядке. Письмо приходит с заполнеными полями. Как сделать так, чтобы с первого раза письмо приходило полностью заполненным.
    С ув. awega777

  37. admin:

    awega777, давайте обсудим Вашу проблему на форуме: трудно искать ошибки в чужом скрипте телепатически на расстоянии.

  38. awega777:

    Я и незнал, что здесь есть форум.
    Благодаря ему, ну и Вам, наверняка, разобрался и все работает.
    Спасибо за ресурс,
    С уважением, awega777

  39. Сергей:

    Добрый день admin!
    Вопрос:
    1 я разбил ваш код на два файла. файл с mail.php (с пхп) и файл с самой формой index.php.
    При заполнении формы и отправки её, форма просто обнуляется и ничего не пишет.
    А если сохранить весь код одним файлом то всё прекрасно работает и на почту отправляется.
    Подскажите в чем ошибка?

    2 два файла надо класть в одну папку? и если нет то куда надо класть файл с обработкой пхп.
    3 где в файле с самой формой идет отсылка на файл с обработчиком пхп (имеется ввиду я могу назвать обработчик как угодно или он должен иметь определённое название?)

    Заранее благодарю!

  40. admin:

    Сергей, разумеется, обработчик может быть назван как угодно - он задается атрибутом action тега form. В атрибуте задается не только имя скрипта-обработчика, но и путь к нему. Если путь не задан, то обработчик должен находиться в одной директории с файлом формы.

    При заполнении формы и отправки её, форма просто обнуляется и ничего не пишет
    Давайте обсудим это на форуме.

  41. Владимр:

    Доброго времени суток! Подскажите возможно ли проверить работу вашего скрипта на локальном компьютере без заливки на сервер? На компьютере установлен Apache+PHP.Пытался, но выдается сообщение :ошибка при отправке письма.

  42. admin:

    Владимир, Apache + PHP мало: нужно еще устанавливать почтовый сервер.

  43. Владимр:

    А какой почтовый сервер посоветуете?

  44. admin:

    Владимр, я никогда не занимался установкой и администрированием почтовых серверов. Какого совета Вы от меня хотите? Под Linux/FreeBSD используются Sendmail, Postfix, Exim, Qmail. Под Windows - Kerio MailServer, Mdaemon, CommunigatePro, CommuniGate Pro. Возможно, Вам подойдет бесплатный Courier Mail Server.

  45. Владимир:

    Поставил Courier Mail Server, все заработало. Спасибо. Хочу адаптировать вашу форму для заказа товаров с сайта. Нужно чтобы сперва был выпадающий список для выбора количества. Help.

  46. admin:

    Нужно чтобы сперва был выпадающий список для выбора количества
    Вам нужен Интернет-магазин? Вообще, у меня есть заметка на эту тему: Простейший Интернет-магазин. Если есть какие-то вопросы, давайте обсудим это на форуме.

  47. Иван:

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

    Спасибо!!!

  48. admin:

    То есть один файл с формой, а второй с кодом отправки?
    А зачем?

  49. Евгений:

    Здравствуйте. Большое спасибо за скрипт, долго искал аналогичный. Подскажите, поместил весь код на одну страницу, ввожу все данные нажимаю кнопку отправить, появляется сообщение “Письмо успешно отправлено” и на почту ничего не приходит, в чем может быть дело!!!!
    Я использую Denwer. Может его надо разбить на две части. Если да, то пожалуйста подскажите как. Заранее большое спасибо.

  50. admin:

    Евгений, функция mail() почту не отправляет, она просто вызывает программу sendmail, которая в дистрибутив Apache и php интерпретатора не входит:
    PHP mail под Windows. Отправка почты из PHP скриптов
    По поводу Denwer:
    Базовый (основной) пакет Денвера включает эмулятор sendmail и SMTP-сервера (отладочная “заглушка” на localhost:25, складывающая приходящие письма в /tmp в формате .eml)

  51. Евгений:

    Огромное спасибо, отправляет на реальный mail.

  52. Аркадий:

    Здравствуйте. Поставил ваш скрипт, отправляет нормально на почту, но после нажатия кнопки отправить страница “зависает”, т.е. скрипт работает не совсем корректно, хотя на другом хостинге всё работало нормально.В чём может быть причина?

  53. admin:

    после нажатия кнопки отправить страница “зависает”… хотя на другом хостинге всё работало нормально. В чём может быть причина?
    Какой-нибудь халявный хостинг без поддержки функции mail().

  54. елена:

    огромное спасибо за вашу работу!!! все работает!!!

  55. Артём:

    Скопирвал код, загрузил страницу на сервер. Открываю, а там фрагменты кода, в полях тоже. Что я сделал не так?

  56. admin:

    Что я сделал не так?
    А PHP на сервере работает?

  57. AxeL:

    Здравствуйте. Спасибо за скрипт. Но после того как закачал на сервер, после нажатия кнопки “отправить”, в любом случае (введены данные или не введены) открывается пустое окно и на почту ничего не приходит. Закомментировал обе функции die(); в скрипте. Стало всё работать, но не совсем корректно, например может выдать сообщение об ошибке, но письмо отправится, или наоборот, сообщится, что письмо отправлено, но на деле ничего не приходит. Как заставить скрипт корректно работать?
    С уважением,
    Александр

  58. admin:

    Как заставить скрипт корректно работать?
    Скрипт работает корректно. Функция mail не отправляет письма, а передает их почтовому серверу, тот ставит их в очередь и рассылает. Если письмо удалось передать почтовому серверу, то функция mail “считает” отправку успешной. У Вас явные пробламы с почтовым сервером. Смените хостера.

  59. AxeL:

    Как раз почтовый сервер работает нормально, так как если все поля заполнены правильно, то сообщение отправляется, а если что-то не введено или и-мэйл неверный, то не отправляется. Проблема в надписях, они появляются в независимости от того, передано письмо почтовому серверу или нет. Иногда правильно, иногда неправильно. Я так понимаю, это из-за того, что я убрал функции die(). Но как я писал выше, если оставить эти функции, то появляется пустая страница без отправки письма. Можно сделать, что бы без этих функций скрипт нормально работал? Функция exit() тоже не помогает, тоже пустая страница появляется

  60. AxeL:

    Ув. admin. К сожалению, ссылка, которую Вы дали почему-то не работает. Я посмотрел лог ошибок у хостера, вот он что выдал:
    [Mon Aug 24 16:31:19 2009] [error] [client 89.235.223.9] PHP Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/la01/10525385/hinnaparing.php:1) in /home/la01/10525385/hinnaparing.php on line 3, referer: http://www.marble.ee/hinnaparing.php

    [Mon Aug 24 16:31:20 2009] [error] [client 89.235.223.9] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/la01/10525385/hinnaparing.php:1) in /home/la01/10525385/hinnaparing.php on line 32, referer: http://www.marble.ee/hinnaparing.php

    а вот строчка 3 и 32 из кода:
    session_start();
    header( ‘Location: ‘.$_SERVER['PHP_SELF'] );

  61. Николай:

    Доброго времени суток!
    Наткнулся на вашу форму после долгих поисков. Что можна сказать супер! Но у меня возникла такая проблемка с сесиями и прошу у Вас помощи.Сайт такого плана эсть index.php (и только в нем находиться ) а форму размещаю в http://www.test2.ru/index.php?itemid=contact там нету возможности разместить над DOCTYPE ( там только контент который инклудиться) верхнюю часть скрипта с сесией на эту страницу(по другому не работает). размещение над DOCTYPE в index.php ниче не дало после отправки даных редирект на главную страницу. Есть какой нибудь выход? можно ли как то в одном скрипте с сесией это сделать чтоб редирект был на ту же страницу? Как быть?

  62. admin:

    после отправки данных редирект на главную страницу

    header( 'Location: '.$_SERVER['PHP_SELF'].'?itemid=contact' );

    и значение атрибута action изменить

    <form action="<?php echo $_SERVER['PHP_SELF'].'?itemid=contact' ?>" method="POST">

    там нету возможности разместить над DOCTYPE верхнюю часть скрипта с сесcией
    Движков существует огромное количество, поэтому посоветовать что-то трудно. Давайте обсудим на форуме.

  63. Николай:

    Та какой там движок самый примитивный самописный!Я в принцыпе был не далеко от решения токо ссылку втыкал с index.php а надо было после “?”, и еще забыл в форм ее вписать к тому же, потому у меня ниче не вышло! Спасибо за помощь! Все работает!

  64. Роман:

    Здравствуйте!
    А как сделать чтобы через эту форму можно было-бы и файлы отправлять. Подскажите пожалуйста.
    А поповоду Вашей формы, пролез пол интернета, перепробовал всякие скрипты, но ни один не работал, а Ваш прекрасно работает. Спасибо!

  65. EvgeniZ:

    Отличный скрипт! Немного доработал его и использую на своем сайте. Спасибо!

  66. Наталья:

    Огромное спасибо, Ваша статья мне очень помогла!
    Долго искала такой скрипт, чтобы форма и обработчик были в одном файле, Ваш вариант наилучший!

  67. Паради:

    Отличный пост! поставлю ссылку на вас……

    У вас в RSS картинки не показывает……

  68. Андрей:

    Здравствуйте! Интересует вопрос, как сделать редирект на отдельную страницу после успешной отправки письма?
    Спасибо.

  69. aparadox:

    Я сервис халявный нашел по отправке Email с сайта. Все просто и легко.
    http://www.cristalsales.ru/NewsSendEmail.aspx

  70. Виктор:

    Автору этого кода респект, реально не то чтобы не знал как его писать, но просто тупо когда запареный и такой код забываешь как сделать это респект, или даже нет времени его строчить, на помощь приходят такие вот красавцы. Спасибо Вам, а то потратил бы пол дня чтобы простейшую форму обратной связи слепить!!!

  71. Руслан:

    Действительно, лучший скрипт, выложенный в свободный доступ. Большое спасибо автору.
    Только вот жаль, что блог уже давно не обновляется?!…

Оставьте свой отзыв