Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP для начинающих - N12


Информационный Канал Subscribe.Ru

PHP для начинающих Выпуск N12
Сайт рассылки: WebTalk.ru - форум вебмастеров
Внимание! Если Вы недавно подписались на рассылку, Вам обязательно нужно прочитать "Информацию для новых подписчиков". Без этой информации Вы не сможете продолжить изучение материалов рассылки. Информация находится по адресу:
http://webtalk.ru/showthread.php?s=&threadid=31

В выпуске:

  1. Только в феврале! Любые домены бесплатно!
  2. Новости форума вебмастеров WebTalk.ru
  3. Форма обратной связи


Только в феврале! Любые домены бесплатно!

Хостинг провайдер RunWeb.Ru
Любые домены бесплатно! Только в феврале!

Хостинг провайдер RunWeb.ru проводит рекламную акцию для клиентов хостинга. При заказе хостинга Вы получаете домен в любой зоне совершенно бесплатно! Это Ваша уникальная возможность купить качественный хостинг по самой конкурентной цене и получить любимый домен в подарок!

Бесплатно регистрируются домены практически во всех зонах - ru, com, net, org, info, biz и т.п. Кроме того, не забывайте про скидку 10% при заказе на год и 20% при заказе на два года, плюс 10% скидку за перенос сайта от другого провайдера. Плюс неизменно высокое качество наших услуг, в котором Вы можете убедиться, заказав бесплатный тестовый эккаунт на нашем сервере. Эккаунт открывается для всех желающих сроком на 10 дней. Мы уверены, что предлагаем Вам самое лучшее!

С нами выгодно работать.
Спешите, акция действует только до конца февраля!

Надеемся на сотрудничество.
С уважением, Юрко Дмитрий (Менеджер).
E-mail: manager@runweb.ru
Хостинг провайдер RunWeb.Ru


Новости форума вебмастеров WebTalk.ru

Вы еще не были на нашем форуме WebTALK.RU? Заходите, не пожалеете :)

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

Если у вас есть вопросы, на которые вы хотели бы получить ответ или вы просто хотите пообщаться с единомышленниками - приходите, все это на WebTALK.RU !

Новости WebTALK.RU

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

2. Продложение конкурса на лучший баннер для WebTALK.RU!
Конкурс на лучший баннер и кнопочку для WebTalk.RU продолжается! Подробности по адресу http://webtalk.ru/showthread.php?s=&threadid=55

3. Рассылка станет платной?
Обсуждение продложается. Выскажите свое мнение! Посмотреть отзывы подписчиков и отставить свой можно здесь: http://webtalk.ru/showthread.php?s=&threadid=54


Форма обратной связи

Вы когда-нибудь хотели установить на свой сайт форму обратной связи? Наверняка Вы встречались с подобными скриптами. Как ни странно, готовые скрипты отправки формы на 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", "Тема письма", "Здравствуйте!\nВам пришло письмо.", "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\nSubject: $subject".$headers;
   fputs($mail, $text_headers);
   fputs($mail, "\n");
   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\nSubject: $subject".$headers;
   fputs($mail, $text_headers);
   fputs($mail, "\n");
   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 и выводим сообщение о результате (отправлено/не отправлено). Здесь все просто и понятно из предыдущих примеров.

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

Оригинал статьи, отзывы, исходники находятся здесь.

До следующего выпуска.
С уважением, Иванов Дмитрий.
Email: dmitry@runweb.ru
Сайт рассылки: WebTalk.Ru - форумы вебмастеров

Ведущий рассылки: Дмитрий. dmitry@runweb.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное