[php] форма заказа с отправкой на почту
необходимо на сайте сделать форму заказа с отправкой на почту.Она не работает, не отправляется письмо.
вот как выглядит форма:
Так как форма эта будет в cms Joomla!,то и код-обработчик я не выношу в отдельный файл, потому что не понимаю как джумла с ним тогда работать будет
код:
function show_form()
{
?>
<form name="forma zakaza" method="POST" action="">
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<th>Контактная информация: <br /> </th> <th>Заявка</th>
</tr>
<tr>
<th>Компания/организация *<br /> </th>
<td rowspan="9"><textarea id="text" cols="31" rows="10" name="textik"></textarea></td>
</tr>
<tr>
</tr>
<tr>
<td><input maxlength="100" name="company" size="34" /><br /></td>
</tr>
<tr>
<th>ФИО*<br /> </th>
</tr>
<tr>
<td><input maxlength="100" name="fullname" size="34" /><br /></td>
</tr>
<tr>
<th>Телефон*<br /> </th>
</tr>
<tr>
<td><input maxlength="100" name="phone" size="34" /><br /></td>
</tr>
<tr>
<th>e-mail*<br /> </th>
</tr>
<tr>
<td><input maxlength="100" name="email" size="34" /></td>
</tr>
<br />
</tbody>
</table>
<input type="submit" name="send" value="отправить заявку" />
</form>
<?php
}
function complete_mail() {
$_POST['company'] = substr(htmlspecialchars(trim($_POST['company'])), 0, 1000);
$_POST['textik'] = substr(htmlspecialchars(trim($_POST['textik'])), 0, 1000000);
$_POST['fullname'] = substr(htmlspecialchars(trim($_POST['fullname'])), 0, 30);
$_POST['phone'] = substr(htmlspecialchars(trim($_POST['phone'])), 0, 30);
$_POST['email'] = substr(htmlspecialchars(trim($_POST['email'])), 0, 50);
$_POST['mess'] = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
// если не заполнено поле "Имя" - показываем ошибку 0
if (empty($_POST['fullname']))
output_err(0);
// если неправильно заполнено поле email - показываем ошибку 1
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['fullname']))
output_err(1);
// если не заполнено поле "Сообщение" - показываем ошибку 2
if(empty($_POST['textik']))
output_err(2);
// создаем наше сообщение
$mess = '
Компания:'.$_POST['company'].'
Контактный телефон:'.$_POST['phone'].'
Контактный email:'.$_POST['email'].'
Суть заявки:'.$_POST['textik'].'
'.$_POST['mess'];
// $to - кому отправляем
$to = 'ehternet@rambler.ru';
// $from - от кого
$from='ehternet@rambler.ru';
mail($to, $_POST['company'], $mess, "From:".$from);
echo 'Спасибо! Ваше письмо отправлено.';
}
function output_err($num)
{
$err[0] = 'ОШИБКА! Не введено имя.';
$err[1] = 'ОШИБКА! Неверно введен e-mail.';
$err[2] = 'ОШИБКА! Не введено сообщение.';
echo '<p>'.$err[$num].'</p>';
show_form();
exit();
}
if (!empty($_POST['send'])) complete_mail();
else show_form();
?>
[QUOTE=Saiko]
echo 'Спасибо! Ваше письмо отправлено.';
[/QUOTE], а
echo 'Спасибо! Ваше письмо отправлено.';
else
// обработать ошибку
2. Сходу ошибок не вижу, а вы смотрели php.ini? Там вообще разрешена отправка писем?
P.S. В дополнительные заголовки, по стандарту SMTP-протокола, положено добавлять CRLF и ставить пробел после названия заголовка.
2. Что говорят логи SMTP сервера?
echo 'Спасибо! Ваше письмо отправлено.';
else
// обработать ошибку
написала. после нажатия на кнопку "отправить" страница обновляется, из таблицы все стираетая,письмо не отсылается((
2.
отправка писем разрешена
сделала,как вы посоветовали
И? Пишет, что письмо отправлено? Или идет по ветке else?
2. Что говорят логи SMTP сервера?
1 после нажатия на кнопку "отправить", страница обрабатывается, все из таблицы исчезает, письмо не отсылается.
вообще ничего не пишет,ни что отправлено,ни что ничего не прозошло.как будто на кнопке вообще нет никакого события
Вас уже три человека спрашивают:
что возвращает ф-ция mail ?
SMTP сервер точно рабочий и настроин правильно?
В общем, совершенно очевидно, что проблема не в доставке, а в отправке. Посмотрите, действительно, логи SMTP-сервера, как вам советовал Lone Wolf, если есть такая возможность.
P.S. Посмотрите все же повнимательнее настройки php.ini. То, что отправка писем разрешена сама по себе, не означает, что там прописаны корректные параметры. Кроме того, проверьте настройки sendmail'а (я так понимаю, отправляете через него?).
P.P.S. Lone Wolf, опередил. =)
В общем, совершенно очевидно, что проблема не в доставке, а в отправке. Посмотрите, действительно, логи SMTP-сервера, как вам советовал Lone Wolf, если есть такая возможность.
P.S. Посмотрите все же повнимательнее настройки php.ini. То, что отправка писем разрешена сама по себе, не означает, что там прописаны корректные параметры. Кроме того, проверьте настройки sendmail'а (я так понимаю, отправляете через него?).
P.P.S. Lone Wolf, опередил. =)
то есть,в целом в самом коде ошибок быть не должно,он рабочий?
хорошо,я еще проверю все логи и настройки.спасибо.
=)
C:\xampp\tmp\sendmail.
Поищи письма здесь...
*wall* Ну хоть мануалы почитали бы, что-ли
http://php.net/manual/en/function.mail.php
Return Values
Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.
It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.
Исходя из этого локализируем направление проблемы.
И вобще. ЛОГИ sendmail - сразу ответят в чем проблема.
Поищи письма здесь...
Kesano, посмотрите на скриншот выше, там прописаны пути типа /usr/sbin/sendmail, какой C:\xampp?
Ну и что?.... У меня в Денвере /home/host, /usr/local/ и т.д... О виртуальных дисках и т.д. слышали?
Не поверите, даже знаю, какой командой они подключаются. :)
Хорошо, согласился. Но если платформа виндовая, то тогда php.ini соответственно должен настраиваться совершенно иначе, нежели в юниксах. + к этому - ручная установка sendmail'а.
Хорошо, согласился. Но если платформа виндовая, то тогда php.ini соответственно должен настраиваться совершенно иначе, нежели в юниксах. + к этому - ручная установка sendmail'а.
XAMPP - это готовая сборка... И ничего там настраивать не нужно... Это для криворуких...
Sendmail там стоит в виде заглушки... Удивлю, но его настраивать тоже не нужно... "заглушка" ничего не отсылает, но генерирует настояшие сообщения, сохраняя их в *.eml в темповой папке... У меня дома "сервак" на FreeBSD... И sendmail там прекрасно работает их PHP при том что я его не настраивал...
Но на самом деле вопрос не в этом. Мы ждем ответа топикстартера... Я допускаю, что я ошибаюсь, но... А вдруг...
Sendmail там стоит в виде заглушки... Удивлю, но его настраивать тоже не нужно... "заглушка" ничего не отсылает, но генерирует настояшие сообщения, сохраняя их в *.eml в темповой папке... У меня дома "сервак" на FreeBSD... И sendmail там прекрасно работает их PHP при том что я его не настраивал...
Но на самом деле вопрос не в этом. Мы ждем ответа топикстартера... Я допускаю, что я ошибаюсь, но... А вдруг...
Ну как вам сказать... На самом деле, мое мнение, что сборки сами по себе - для криворуких. Любой адекватный программист / сисадмин всегда настроит любую сборку под себя. А "удивлять" меня не нужно, я сам хостинг администрирую (правда, не на винде). Да, и не сравнивайте FreeBSD с виндой, на FreeBSD sendmail действительно разворачивается из портов и работает после этого.
P.S. Таким образом, назрел вопрос к топикстартеру: на какой платформе хостинг?
P.S. Таким образом, назрел вопрос к топикстартеру: на какой платформе хостинг?
Если девушка подняла XAMPP на *nix (LinFreeOSx) буду вынужден флиртовать с ней и буду стараться всячески помочь...
Сейчас попробую отправить со своего домашнего сервера mail() с ВиртХоста без домена... Отпишусь...
Но отсылает...
Received: by 10.236.111.11 with SMTP id v11cs33485yhg;
Sun, 10 Apr 2011 12:01:59 -0700 (PDT)
Received: by 10.216.59.205 with SMTP id s55mr1821285wec.72.1302462118891;
Sun, 10 Apr 2011 12:01:58 -0700 (PDT)
Return-Path: <www@kxserver>
Received: from KXSERVER ([xxx.xxx.xxx.xxx])
by mx.google.com with ESMTPS id u18si9394036wes.82.2011.04.10.12.01.58
(version=TLSv1/SSLv3 cipher=OTHER);
Sun, 10 Apr 2011 12:01:58 -0700 (PDT)
Received-SPF: neutral (google.com: xxx.xxx.xxx.xxx is neither permitted nor denied by best guess record for domain of www@kxserver) client-ip=xxx.xxx.xxx.xxx;
Authentication-Results: mx.google.com; spf=neutral (google.com: xxx.xxx.xxx.xxx is neither permitted nor denied by best guess record for domain of www@kxserver) smtp.mail=www@kxserver
Received: from KXSERVER (localhost [127.0.0.1])
by KXSERVER (8.14.4/8.14.4) with ESMTP id p3AJ2d9r001959
for <мое_мыло@gmail.com>; Sun, 10 Apr 2011 22:02:39 +0300 (EEST)
(envelope-from www@KXSERVER)
Received: (from www@localhost)
by KXSERVER (8.14.4/8.14.4/Submit) id p3AJ2d09001958;
Sun, 10 Apr 2011 22:02:39 +0300 (EEST)
(envelope-from www)
Date: Sun, 10 Apr 2011 22:02:39 +0300 (EEST)
Message-Id: <201104101902.p3AJ2d09001958@KXSERVER>
To: xxxxx@gmail.com
Subject: Test MSG from 10.100.0.100
X-PHP-Script: 10.100.0.100/ben.php for 10.100.0.11
From: noreply@KXSERVER
test message
Вместо имени домена принимает имя сервера... IP и имя хоста затёл, чтобы жестко не деанониться )
Сервер стоит за рутером с локальным IP и просто проброшенным 80 портом...
Так что без. правильно настроеного smtp, это касается и очередей и MX записей, работоспособность получить не получится.
Вобще такие вещи нужно смотреть по ЛОГАМ. пишу раз в десятый. Открываем, /usr/logs/mail.log и смотрим, если на отправку ушло письмо, значит скрипт работает, а вот если не дошло.. то уже колупать сам сервак.