Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[php] форма заказа с отправкой на почту

39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
здраствуйте!помогите пожалуйста.не пройдите мимо. я уже сама все перепробовала , но ничего не получается. чувствую,что ошибка простая, но не могу ее найти.
необходимо на сайте сделать форму заказа с отправкой на почту.Она не работает, не отправляется письмо.
вот как выглядит форма:
Так как форма эта будет в cms Joomla!,то и код-обработчик я не выношу в отдельный файл, потому что не понимаю как джумла с ним тогда работать будет
код:
Код:
<?php
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();
?>
278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
1. Вы смотрели, что возвращает функция mail()? Корректнее было бы написать не
[QUOTE=Saiko]
 
Код:
mail($to, $_POST['company'], $mess, "From:".$from);
        echo 'Спасибо! Ваше письмо отправлено.';

[/QUOTE], а
 
Код:
if (mail($to, $_POST['company'], $mess, "From:".$from))
             echo 'Спасибо! Ваше письмо отправлено.';
        else
             // обработать ошибку


2. Сходу ошибок не вижу, а вы смотрели php.ini? Там вообще разрешена отправка писем?

P.S. В дополнительные заголовки, по стандарту SMTP-протокола, положено добавлять CRLF и ставить пробел после названия заголовка.
 
Код:
mail($to, $_POST['company'], $mess, "From: ".$from."\r\n");
13
10 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Попробуйте еще строку передаваемую в переменную $mess сделать без переносов строк.
274
10 апреля 2011 года
Lone Wolf
1.3K / / 26.11.2006
1. mail - отрабатывает правильно? письмо на отправку уходит, но не отсылается?
2. Что говорят логи SMTP сервера?
39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
Цитата: Alexander92
1. а
 
Код:
if (mail($to, $_POST['company'], $mess, "From:".$from))
             echo 'Спасибо! Ваше письмо отправлено.';
        else
             // обработать ошибку


написала. после нажатия на кнопку "отправить" страница обновляется, из таблицы все стираетая,письмо не отсылается((
2.

Цитата:
Сходу ошибок не вижу, а вы смотрели php.ini? Там вообще разрешена отправка писем?


отправка писем разрешена

39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
Цитата: RussianSpy
Попробуйте еще строку передаваемую в переменную $mess сделать без переносов строк.


сделала,как вы посоветовали

278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Saiko
написала. после нажатия на кнопку "отправить" страница обновляется, из таблицы все стираетая,письмо не отсылается((



И? Пишет, что письмо отправлено? Или идет по ветке else?

39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
Цитата: Lone Wolf
1. mail - отрабатывает правильно? письмо на отправку уходит, но не отсылается?
2. Что говорят логи SMTP сервера?



1 после нажатия на кнопку "отправить", страница обрабатывается, все из таблицы исчезает, письмо не отсылается.

39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
Цитата: Alexander92
И? Пишет, что письмо отправлено? Или идет по ветке else?



вообще ничего не пишет,ни что отправлено,ни что ничего не прозошло.как будто на кнопке вообще нет никакого события

274
10 апреля 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: Saiko
1 после нажатия на кнопку "отправить", страница обрабатывается, все из таблицы исчезает, письмо не отсылается.


Вас уже три человека спрашивают:
что возвращает ф-ция mail ?
SMTP сервер точно рабочий и настроин правильно?

278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
А вы его попросили что-то выводить там, где я написал "обработка ошибок" в примере? Мне думается, что нет. :)
В общем, совершенно очевидно, что проблема не в доставке, а в отправке. Посмотрите, действительно, логи SMTP-сервера, как вам советовал Lone Wolf, если есть такая возможность.

P.S. Посмотрите все же повнимательнее настройки php.ini. То, что отправка писем разрешена сама по себе, не означает, что там прописаны корректные параметры. Кроме того, проверьте настройки sendmail'а (я так понимаю, отправляете через него?).

P.P.S. Lone Wolf, опередил. =)
39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
функция mail ничего не возвращает, ни сообщения об удачной отправки,ни об ошибке.

так как используется Джумла,то настройки почты в ней только таки я нашла
39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
Цитата: Alexander92
А вы его попросили что-то выводить там, где я написал "обработка ошибок" в примере? Мне думается, что нет. :)
В общем, совершенно очевидно, что проблема не в доставке, а в отправке. Посмотрите, действительно, логи SMTP-сервера, как вам советовал Lone Wolf, если есть такая возможность.

P.S. Посмотрите все же повнимательнее настройки php.ini. То, что отправка писем разрешена сама по себе, не означает, что там прописаны корректные параметры. Кроме того, проверьте настройки sendmail'а (я так понимаю, отправляете через него?).

P.P.S. Lone Wolf, опередил. =)



то есть,в целом в самом коде ошибок быть не должно,он рабочий?
хорошо,я еще проверю все логи и настройки.спасибо.

278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Самый простой тест, который я бы запустил на вашем месте:
 
Код:
telnet localhost 25

=)
244
10 апреля 2011 года
UAS
2.0K / / 19.07.2006
Как вариант - если стоит Денвер, то почта отправляться никуда и не будет - она складывается куда-то в специальную папку.
39K
10 апреля 2011 года
Saiko
23 / / 09.01.2009
стоит xampp
369
10 апреля 2011 года
Kesano
451 / / 09.10.2007
Цитата: Saiko
стоит xampp



C:\xampp\tmp\sendmail.
Поищи письма здесь...

274
10 апреля 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: Saiko
функция mail ничего не возвращает, ни сообщения об удачной отправки,ни об ошибке.



*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 - сразу ответят в чем проблема.

278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Kesano
C:\xampp\tmp\sendmail.
Поищи письма здесь...



Kesano, посмотрите на скриншот выше, там прописаны пути типа /usr/sbin/sendmail, какой C:\xampp?

369
10 апреля 2011 года
Kesano
451 / / 09.10.2007
Цитата: Alexander92
Kesano, посмотрите на скриншот выше, там прописаны пути типа /usr/sbin/sendmail, какой C:\xampp?



Ну и что?.... У меня в Денвере /home/host, /usr/local/ и т.д... О виртуальных дисках и т.д. слышали?

278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Kesano
Ну и что?.... У меня в Денвере /home/host, /usr/local/ и т.д... О виртуальных дисках и т.д. слышали?



Не поверите, даже знаю, какой командой они подключаются. :)
Хорошо, согласился. Но если платформа виндовая, то тогда php.ini соответственно должен настраиваться совершенно иначе, нежели в юниксах. + к этому - ручная установка sendmail'а.

369
10 апреля 2011 года
Kesano
451 / / 09.10.2007
Цитата: Alexander92
Не поверите, даже знаю, какой командой они подключаются. :)
Хорошо, согласился. Но если платформа виндовая, то тогда php.ini соответственно должен настраиваться совершенно иначе, нежели в юниксах. + к этому - ручная установка sendmail'а.



XAMPP - это готовая сборка... И ничего там настраивать не нужно... Это для криворуких...
Sendmail там стоит в виде заглушки... Удивлю, но его настраивать тоже не нужно... "заглушка" ничего не отсылает, но генерирует настояшие сообщения, сохраняя их в *.eml в темповой папке... У меня дома "сервак" на FreeBSD... И sendmail там прекрасно работает их PHP при том что я его не настраивал...

Но на самом деле вопрос не в этом. Мы ждем ответа топикстартера... Я допускаю, что я ошибаюсь, но... А вдруг...

278
10 апреля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Kesano
XAMPP - это готовая сборка... И ничего там настраивать не нужно... Это для криворуких...
Sendmail там стоит в виде заглушки... Удивлю, но его настраивать тоже не нужно... "заглушка" ничего не отсылает, но генерирует настояшие сообщения, сохраняя их в *.eml в темповой папке... У меня дома "сервак" на FreeBSD... И sendmail там прекрасно работает их PHP при том что я его не настраивал...

Но на самом деле вопрос не в этом. Мы ждем ответа топикстартера... Я допускаю, что я ошибаюсь, но... А вдруг...



Ну как вам сказать... На самом деле, мое мнение, что сборки сами по себе - для криворуких. Любой адекватный программист / сисадмин всегда настроит любую сборку под себя. А "удивлять" меня не нужно, я сам хостинг администрирую (правда, не на винде). Да, и не сравнивайте FreeBSD с виндой, на FreeBSD sendmail действительно разворачивается из портов и работает после этого.

P.S. Таким образом, назрел вопрос к топикстартеру: на какой платформе хостинг?

13
10 апреля 2011 года
RussianSpy
3.0K / / 04.07.2006
Если вы пытаетесь отправить письмо через почтовые сервисы со своего компутера - у вас ничего не выйдет. В целях борьбы со спамом невозможно отослать письмо с IP адреса не имеющего соответствующего ему домена. То есть получив внешний IP для своего ПК невозможно установив на нем почтовый сервер тупо слать с него письма. Только через авторизацию на других почтовых серверах. Так было во всяком случае раньше в 2004-2008 годах (вряд ли сейчас по-другому). Поэтому если письмо отправляется с помощью вашего почтового сервера на вашей домашней машине (а функция mail другого не позволяет) - письмо уходить не будет. Тут единственный вариант сокеты, авторизация на почтовых серверах как это делают почтовые клиенты вроде того же Outlook.
369
10 апреля 2011 года
Kesano
451 / / 09.10.2007
Цитата: Alexander92

P.S. Таким образом, назрел вопрос к топикстартеру: на какой платформе хостинг?



Если девушка подняла XAMPP на *nix (LinFreeOSx) буду вынужден флиртовать с ней и буду стараться всячески помочь...

369
10 апреля 2011 года
Kesano
451 / / 09.10.2007
Цитата: RussianSpy
Если вы пытаетесь отправить письмо через почтовые сервисы со своего компутера - у вас ничего не выйдет.



Сейчас попробую отправить со своего домашнего сервера mail() с ВиртХоста без домена... Отпишусь...

369
10 апреля 2011 года
Kesano
451 / / 09.10.2007
Дошло, правда ушло в спам...

Но отсылает...

Код:
Delivered-To: мое_мыло@gmail.com
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 портом...
274
11 апреля 2011 года
Lone Wolf
1.3K / / 26.11.2006
google примет, а вот ukr.net к примеру - точно не возьмет, яндексы и mail.ru тоже скорее всего.
Так что без. правильно настроеного smtp, это касается и очередей и MX записей, работоспособность получить не получится.

Вобще такие вещи нужно смотреть по ЛОГАМ. пишу раз в десятый. Открываем, /usr/logs/mail.log и смотрим, если на отправку ушло письмо, значит скрипт работает, а вот если не дошло.. то уже колупать сам сервак.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог