Статьи PHP, Форум, Уроки PHP, дизайн, раскрутка сайта
Портал для программистов, дизайнеров, SEO - оптимизаторов.
Статьи PHP, MySQL, AJAX, Раскрутка сайта, Заработок на своем сайте
Статьи PHP, MySQL, AJAX, Раскрутка сайта, Заработок на своем сайте
TIGER ICQ 3 6 0 2 9 5 6 8 3
     
Выберите раздел
php, javascript,ajax,mysql,TIGER CMS
  Для начинающих
php, javascript,ajax,mysql,TIGER CMS
  Общие
php, javascript,ajax,mysql,TIGER CMS
  Безопасность
php, javascript,ajax,mysql,TIGER CMS
  Интересное
php, javascript,ajax,mysql,TIGER CMS
  Новости PHP
php, javascript,ajax,mysql,TIGER CMS
  PHP + AJAX
php, javascript,ajax,mysql,TIGER CMS
  JavaScript
php, javascript,ajax,mysql,TIGER CMS
  Дизайн
php, javascript,ajax,mysql,TIGER CMS
  Раскрутка
php, javascript,ajax,mysql,TIGER CMS
  Заработок
php, javascript,ajax,mysql,TIGER CMS
  Советы

Поиск
 
 
 

Друзья сайта
 
 
1. www.bvisoft.com
Онлайн счетчик
 

Статистика
  Всего статей: 405
  Опубликовано: 405
  Проверяються: 0
  Добавлено сегодня: 0
--------------------------------------
  Прочитано статей: 405
  Всего прочтений: 155334
--------------------------------------
  Сейчас читают: 4 чел.

Кнопка сайта
  Если мой сайт вам чем-то помог, поставьте, пожалуйста, на своем сайте такую кнопку:
 
  Код кнопки:
 

 

Форма обратной связи [Версия для печати]
Разместил: admin . Раздел: Безопасность. Опубликовано: 09-20-2007 18:22:02
Вы когда-нибудь хотели установить на свой сайт форму обратной связи? Наверняка Вы встречались с подобными скриптами.
Как ни странно, готовые скрипты отправки формы на email пользуются большой популярностью
(Вы можете убедиться в этом в любом архиве скриптов), причем их существует великое множество.
Есть простые, в которых ничего не меняется, а есть сложные и большие системы, которые функционируют на mysql,
позволяют динамически изменять любые поля, содержат кучу настроек... Но так ли они нужны?
На мой взгляд необходимость в подобных системах очень сомнительна.

Тестировать отправку почты на домашнем компьютере не получиться. Для этого Вам необходим хостинг с
поддержкой php и функциями отправки почты. Я рекомендую Вам хостинг-провайдера runweb.ru.
Этот провайдер предлагает отличные тарифы, высочайшую скорость доступа и отличное обслуживание.

Найти оригинал этой статьи, а также загрузить исходники, приведенные здесь и оставить
Ваш комментарий можно на этой странице: http://webtalk.ru/showthread.php?s=&threadid=99

Методы отправки почты

Отправлять почту с сервера с помощью php можно двумя основными способами.
Я хочу рассмотреть оба этих способа по порядку.

Первый и самый простой - это использование php функции mail(). Функция очень простая и понятная,
хотя отправка почты с использованием mail() имеет и ряд недостатков.
Самый главный - письмо отправляется не напрямую,
а через php. Одновременно программа php подставляет
в письмо некоторые свои поля. Например, у Вас не получится корректно указать отправителя. В поле "from"
(то есть от кого пришло письмо) в большинстве случаев будет стоять имя сервера.
Все дело в том, что php подставляет свои заголовки в служебную строку письмо "from".

Тем не менее отправка почты с помощью функции mail() остается самым простым
способом отправить письмо с сервера.
Давайте рассмотрим этот способ подробнее.

Функция mail() имеет следующий синтаксис:

mail($to, $subject, $body, $headers);


$to - это адрес получателя. Например, "ivan@ivanov.com".
$subject - тема письма. Например, "Вам пришло письмо".
$body - текст сообщения.
$headers - любые заголовки письма. Например, адрес отправителя будет выглядеть так: "from: dmitry@webtalk.ru".


Вот полный пример отправки почты с помощью mail():

mail("vash_email@domain.ru", "Тема письма", "Здравствуйте! Вам пришло письмо.", "from: site_name");

Обратите внимание, что при использовании этой функции на домашнем компьютере она может выдавать ошибку,
так как не может отправить письмо без почтового сервера.

Теперь давайте посмотрим, как можно отправить письмо с помощью sendmail.

sendmail - это стандартная программа операционной системы unix, которая отправляет почту.
php может запускать unix-программы путем использования средства pipes (дословно "трубопроводы").
Это средство unix позволяет направлять данные из одной программы в другую, наподобие того, как мы пишем в файл.
Только файлом в этом случае выступает программа (в частности, sendmail), которая и получает данные.

sendmail программа имеет множество параметров, мы будем использовать некоторые из них.
Чтобы использовать sendmail, нужно открыть к нему поток (pipe). В php это делается использованием команды popen(),
которая по синтаксису идентична команде fopen(). Путем использования popen() мы открывает поток к sendmail
для записи в него (помните, параметр режима "w"?), после чего можно отправлять в него данные обычной командой fputs().
Посмотрим, как полностью выглядит процедура отправки письма через sendmail:

<?
// описываем переменные и rfc заголовки письма
$from = "dmitry@webtalk.ru";
$recipients = "mail@domain.ru";
$headers = "content-type: text/plain; charset="windows-1251"";

// открываем sendmail и отправляем письмо
$mail = popen("/usr/sbin/sendmail -i -f$from -- $recipients", 'w');
$text_headers = "from: $from subject: $subject".$headers;
fputs($mail, $text_headers);
fputs($mail, " ");
fputs($mail, $body);

// проверяем на ошибку
$result = pclose($mail) >> 8 & 0xff;
if ($result) echo "sendmail error! error code: $result";
?>

В этой программе первое, что мы делаем - описываем rfc заголовки. rfc - это службные поля,
которые содержат всю информацию о письме. Увидеть пример rfc Вы можете, например, в программе the bat!,
щелкнув правой кнопкой мыши на тексте письмо и выбрав "rfc-822 headers" (название пункта может отличаться).
Чтобы убрать их, повторите действия. В заголовке мы описываем поля "content-type", которые указывают
что письмо текстовое и в кодировке windows-1251 (стандартная кодировка windows).
В качестве кодировки также может быть использовано "koi8-r", это стандартная кодировка unix.
В этой статье мы не будем рассматривать возможные rfc заголовки подробно. Мы сделаем это чуть позже,
когда будем ближе работать с почтой.
Итак, после того, как мы описали служебные переменные и заголовки письма, мы открываем sendmail.
Обратите внимание на путь к программе "/usr/sbin/sendmail". На разных серверах он может отличаться!
Если эта строка не работает, спросите у Вашего провайдера, где расположен sendmail.
Далее указываются параметры: "-i -f$from -- $recipients". Это стандартные параметры для отправки письма и
в них подставляется два поля: $from - от кого, $recipients - адреса получателей.
В нашем случае переменная $recipients содержит всего один адрес.
На самом деле можно использовать несколько адресов, указывая их через пробел:

$recipients = "mail@domain.ru mail-1@domain.ru mail-2@domain.ru";

Далее мы записываем в поток сначала заголовки письма (переменная $text_headers), потом отделяем
их символом переноса строки и записываем текст сообщения. Последний шаг - закрытие потока и проверка на ошибку.
При правильном выполеннии в переменную $result помещается ноль, а если возникла ошибка, в нее записывается номер ошибки.

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

Создаем форму обратной связи

Наша форма обратной связи будет представлять собой один скрипт. Этот скрипт будет выводить форму и отправлять письмо.
Давайте сразу посмотрим на текст этого скрипта:

<!doctype html public "-//w3c//dtd html 4.01 transitional//en">

<html>
<head>
<title>Обратная связь</title>
</head>

<body>

<?

function show_form($s="") {
global $name,$email,$domain,$message;
if ($s) echo "<b>Ошибка:</b> $s";
?>
<table width=450 cellpadding=0 cellspacing=1 bgcolor=#808080>
<form action="contact.php" method=post>
<tr><td colspan=2 bgcolor=#eaebef height=25 align=center>
<b>Прямая связь</b></td></tr>
<tr bgcolor=#f0f0f0>
<td height=30 width=200> <b>Ваше имя: *</b></td>
<td bgcolor=#ffffff> <input type=text name=name size=30></td>
</tr>
<tr bgcolor=#f0f0f0>
<td height=30> <b>Ваш email: *</b></td>
<td bgcolor=#ffffff> <input type=text name=email size=30></td>
</tr>
<tr bgcolor=#f0f0f0>
<td height=30> <b>Ваш сайт:</b></td>
<td bgcolor=#ffffff> <input type=text name=domain size=30></td>
</tr>
<tr bgcolor=#f0f0f0>
<td height=30 colspan=2>
<table width=100% cellpadding=5 cellspacing=5><tr><td>
<b>Ваше сообщение: *</b><br>
<textarea cols=50 rows=5 name=message></textarea>
</td></tr></table>
</td>
</tr>
<tr><td colspan=2 bgcolor=#eaebef height=35 align=center>
<input type="submit" value="Отправить вопрос"></td></tr>
<input type=hidden name=a value=1>
</form>
</table>
<p>
Поля, отмеченные звездочкой (*) должны быть заполнены.

</body>
</html>
<?
exit();
};


// если не было добавления сообщения, выводим форму
if (!$a) show_form();

// проверяем данные формы
if (!$name) show_form("Укажите Ваше имя!");
if (!$email) show_form("Укажите Ваш email!");
if (!$message) show_form("Вы не заполнили текст сообщения!");

// описываем переменные и rfc заголовки письма

// обратный адрес будет указанным адресом отправителя сообщения
$from = $email;
$recipients = "admin@webtalk.ru"; // Ваш email
$headers = "content-type: text/plain; charset="windows-1251""; // кодировка письма

// открываем sendmail и отправляем письмо
$mail = popen("/usr/sbin/sendmail -i -f$from -- $recipients", 'w');
$text_headers = "from: $from subject: $subject".$headers;
fputs($mail, $text_headers);
fputs($mail, " ");
fputs($mail, $body);

// проверяем на ошибку
$result = pclose($mail) >> 8 & 0xff;
if ($result) echo "Сообщение не было отправлено!";
else echo "Спасибо, Ваше сообщение отправлено.
Администратор свяжется с Вами в ближайшее время!";
?>
</body>
</html>

Взять готовый скрипт Вы можете по адресу: http://webtalk.ru/showthread.php?s=&threadid=99.
Теперь давате рассмотрим, как работает эта программа. Выполнение начинается со строки "if (!$a) show_form();",
так как до этого указана функция, которая, естественно, не выполняется. В этой строке мы проверяем,
была ли попытка заполнения формы (из формы, как Вы видите, передается переменная $a, которая и
проверяется в этой строке).
Если такой попытки не было, вызывается функция show_form(), которая выводит форму.

Далее, если форма уже передавалась скрипту, проверяются обязательные поля. Поля "имя", "email" и "текст сообщения"
являются обязательными. Если какое-либо из них не заполнено, форма вызывается с параметром $s,
в котором передается сообщение об ошибке.

Теперь, если все правильно, мы описываем необходимые переменные и rfc заголовки письма, после чего
отправляем сообщение через sendmail и выводим сообщение о результате (отправлено/не отправлено).
Здесь все просто и понятно из предыдущих примеров.

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

Источник: http://articles.org.ru   Прочитана 436 раз.
  Закладки:  
     
     
     




     
   TIGER EMAIL tiger1989@mail.ru
online SpyLOG тИЦ и PR
Copyright 2007 by TIGERCMS.com
Powered by TIGER-News v1.1
Реклама: