Методы отправки почты. Создаем форму обратной связи

Новости 28.03.2019
22.05.06 83.2K

Вы когда-нибудь хотели установить на свой сайт форму обратной связи? Наверняка Вы встречались с подобными скриптами. Как ни странно, готовые скрипты отправки формы на email пользуются большой популярностью (Вы можете убедиться в этом в любом архиве скриптов), причем их существует великое множество. Есть простые, в которых ничего не меняется, а есть сложные и большие системы, которые функционируют на mysql, позволяют динамически изменять любые поля, содержат кучу настроек… Но так ли они нужны? На мой взгляд необходимость в подобных системах очень сомнительна.

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

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

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

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

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

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

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

$to - это адрес получателя. Например, "[email protected]". $subject - тема письма. Например, "Вам пришло письмо". $body - текст сообщения. $headers - любые заголовки письма. Например, адрес отправителя будет выглядеть так: "from: [email protected]".

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

mail("[email protected]", "Тема письма", "Здравствуйте!nВам пришло письмо.", "from: site_name");

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

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

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

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

> 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 = "[email protected] [email protected] [email protected]";

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

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

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

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

contact.php:

Обратная связь Ошибка: $s"; ?>

Прямая связь
Ваше имя: *
Ваш email: *
Ваш сайт:
Ваше сообщение: *

Поля, отмеченные звездочкой (*) должны быть заполнены. > 8 & 0xff; } else $result=(mail($recipients, $subject, $body, "from: ".$from."rn".$headers) ? FALSE: TRUE); if ($result) echo "Сообщение не было отправлено!"; else echo "Спасибо, Ваше сообщение отправлено. Администратор свяжется с Вами в ближайшее время!"; ?>

Теперь давате рассмотрим, как работает эта программа. Выполнение начинается со строки "if (!$a) show_form();", так как до этого указана функция, которая, естественно, не выполняется. В этой строке мы проверяем, была ли попытка заполнения формы (из формы, как Вы видите, передается переменная $a, которая и проверяется в этой строке). Если такой попытки не было, вызывается функция show_form(), которая выводит форму.

Я ощущаю безнадёжность, когда кажется, что все бессмысленно и ни к чему не приведёт, крах жизни. Это чувство, когда руки опускаются и любые мысли или действия, призванные обнадёжить или изменить что-то, отбрасываются как бесполезные. Сопровождается у меня чувством одиночества, когда кажется, что никому я не нужен со своими проблемами и заморочками.

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

Сегодня занимаю себя какими-то действиями: например, уборка по дому, игра в компьютер.

Самому любопытно, как проживаются чувства, потому что я их проживать, наверное, не умею.

Безнадежность.

В своей жизни лишь однажды испытывал подобное чувство!

Мне было лет 15.

В очередное посещение одного из тренигов, меня переполняла стойкая уверенность в своих силах, я достигал успеха из раза в раз...

И вот она, ситуация, задание с тремя действующими лицами, разыгрывается ситуация..банальная, как мне тогда казалось.

Для меня безнадежность - это отсутствие желания что-либо делать, полная подавленность и безразличие ко всему, депрессия.

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

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

Безнадежность - это когда я не вижу выхода и опускаются руки, не хочется что-либо предпринимать, потому что не вижу в этом смысла, когда нет надежды, которая, по идее, должна умирать последней.

Однозначно не хочу проживать это чувство, но выход всегда есть, также как и в наркомании, выхода из которой я не видел, но благодаря ВС и людям, которые мне его показали, я сегодня трезвый, с Богом, с Вами. Безнадежность - тяжелое чувство, стараюсь перепоручать и нахожу выход, ведь безнадежных ситуаций не бывает. Вера очень помогает. Теперь я знаю, что признать ситуацию безнадежной - это значит сдаться и ничего не делать, так что не надо быть пессимистом. В любом негативе можно найти позитив - из любой безнадежной ситуации есть выход.

В последнее время мне все чаще приходится сталкиваться с бездарность в IT. Друзья обращаются за консультациями, и когда начинаешь разбираться в предмете вопроса, волосы начинают вставать дыбом на всех возможных местах. Узнав, сколько друзья заплатили за подобные услуги, испытываешь приступ шока.

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

Есть такие люди, которые любят ругать всех и превозносить свои знания. Такие «левши» есть в каждой сфере. Возможно, они прошли за свою практику огонь, воду и медные трубы и имеют полное право так рассуждать. В сфере информационных технологий, людей подпадающих под это описание встретить тяжело. Технологий слишком много и быть экспертом абсолютно во всех – невозможно.

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

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

Сегодня довелось поговорить с подобным всезнайкой в области БД. Человек, гордо величавший себя профессионалом, полностью загубил базу КИС и даже не подумал признать свою вину. Он просто делал обновление и что-то пошло не так. Резервную копию перед установкой апдейтов ему делать не захотелось (действительно, а зачем?) и при возникновении проблемы особо голову ломать не стал. Просто залил копию месячной давности и отрапортовал о проделанной работе.

Круто? Я чуть со стула не упал от такого профессионализма. Мало то, что не была создана политика резервного копирования, так этот умелец не удосужился сделать копию перед такой важной операцией как обновление структуры БД. Оказалось, что забывчивость – не главная его проблема.

Я взял телефон этого специалиста и решил лично созвониться. Мало ли, вдруг у человека были веские причины принять это решение. Лучше бы не созванивался. Причин никаких не было, а вот некомпетентности и отсутствие элементарных знаний - целый вал.

Он тупо пытался оправдать себя, и мои вопросы вызвали лишь удивление. Представляете, он заявил мне, что никаких таблиц программа не использует. Все хранится в одном единственном файле. Эти слова окончательно убили во мне частички веры, на положительный исход. Это он мне рассказывал о FireBird.

Раз все хранится в одном файле и программа не может этот файл «прочитать», то надо просто вернуться к старой копии. Зачем пытаться разобраться в проблеме и хотя бы вытащить важную информацию напрямую из таблиц? Дальнейший разговор было продолжать бессмысленно. Специалист просто одним махом убил работу людей за полмесяца и получил вознаграждение.

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

Это не спасет от проблем, но даст четкое понимание, что делает человек и какие участки его работы требуют повышенного внимания. Например, если вы не разбираетесь в ИТ, и в вашей компании есть базы данных, от которых зависит жизнь организации, то не поскупитесь приобрести профессиональную программу для резервного копирования. Пусть приходящий специалист ее настроит, и вы будите получить ежедневные отчеты на email о результатах резервного копирования.

Я не случайно заговорил о программном обеспечении, т.к. на практике прочувствовал, что не все ИТ-специалисты готовы автоматизировать процесс резервного копирования. Они либо берут обязанность за создания копий на себя, либо просто играют в русскую рулетку. В итоге от этой ситуации проигрываете только вы – руководитель компании.



Рекомендуем почитать

Наверх