Почтовый робот и CRON |
||||
---|---|---|---|---|
Почтовый робот - это программа, которая анализирует почту, пришедшую на определнный почтовый ящик, и производит разные действия. Основная цель этой статьи о почтовых роботах. Но раз уж тут будет упомянут крон, то и о нем.
Сразу
хочется предупредить, что здесь будет рассказано о множестве способов сделать
одну вещь разными способами, поэтому вам придется немного думать... Это к тому,
что к статьтье по отправке писем с аттачем постоянно имеют притензии разные
люди, которые не умееют заполнить ни "почтовый хост провайдера", ни даже
"обратный адрес". Пока вы будете читать эту статью, вы узнаете о большом
количестве ньюансов и поймете, что спрашивать или объяснять в 2х словах "как
сделать почтового робота?" невозможно. CRON - средство выполнять регулярные действия на серверах типа Unix. В Windows крон называют шедулером. Суть одна: делаем правила срабатывания крона, например раз в 2 минуты или в 23:59 по четвергам, и что делать, например запустить php-программу (чтобы та делала нужную работу). В форуме часто возникает вопрос "как делать что либо регулярно?". Именно крон решает эту проблему. Способы обработки почты:
Больше ничего придумать нельзя. Разве что совсем не реагировать на почту.
-- I -- Почтовый робот за 10 минут ("COMMAND")Для тех, кто хочет по быстрому все настроить, будет полезна данная глава.
После нее начнется менее конкретная теория.
3) Как это работает. Мы еще не закончили, но
уже видно, как это будет работать. Во-первых, данный скрипт будет запущен только
при приходу письма. Во-вторых, вам подадут письмо в готовом виде - надо только
открыть входной поток (файл со спец. именем
php://stdin) и прочитать от туда текст.
Представьте, что это обычный файл. После того, как вы прочитали письмо, функции
почтового робота заканчиваются. Вы можете поместить письмо в переменную или
сразу построчно обработать, но главное - это уже совсем другая история, каким
образом реагировать на текст-письма (там есть заголовок, тело, поля в
заголовке...). В примере мы записываем текст письма в файл
/tmp/php-robot.txt (доступ к каталогу
/tmp имеют все пользователи на сервере). Число
10`000 очень завышено. Максимальная длина письма, толи 1 Кбайт, толи 2 Кбайта (в
этом пределе). Писем с большими по длине строками не бывает, это вам может
гарантировать ваш почтовый сервер.
5) Вам нужен админ сервера. Если вы живете на платном хостинге, админ может и не согласиться, но если ваш хостинг по месту работы - местный админ сделать обязан. Админов, которые что-то заявляют о дырявости ПХП или ненадежности таких технологий надо гнать с позором. В функции администратора сервера входит защита веб-сервера и веб-программ от взлома через сам сервер, а не методом ошибок в веб-программах. (Веб-программер, разумеется, должен писать программы без ошибок.) В том числе админ должен думать, что будет, если кто-то начнет целенаправлено спамить ваш хост письмами (есть элементарная защита - настройки в sendmail). Итак, к делу - надо в файл /etc/aliases поместить строку testmail: |/home/dima/mail.php Допустим, ваш основной домен - php.spb.ru. Тогда
адрес почтового робота будет [email protected].
Если домен не совпадает с основным, то можно воспользоваться виртульными
доменами sendmail'а, обычно это файл с названием
virtual (если админ не умеет - на мыло).
makemap hash /etc/aliases.db < /etc/aliases ; newaliases Возможно, досточно выполнить только одну из этих команд... Но так будет
работь. |/home/dima/mail.php Данный файл (.forward) дает возможноть любому
пользователю, у когорого есть домашний каталог и шелл (только FTP -
недостаточно), перенаправлять свою почту на нужные адреса (их может быть много)
или запускать команды по приходу письма. E-mail пишут как есть, а команды
начинают с вертикальной черты. Много записей разделяют либо запятой, либо
переводом строки. Сделайте так и пошлите письмо работу. Обратите внимание,
теперь у робота будет адрес пользователя данного каталога
/home/dima. Т.е. никаких "testmail" в таком случае
сделать нельзя. Для этого существуют алиасы, что и было описано в пунктах 5+6.
Адрес будет совпадать с ваши логином на сервере, домен будет основной, т.е.
e-mail получиться таким: [email protected]. Если
после письма файл логов не измениться - значит этот способ на данном сервере не
работет (в принципе он должен работать).
9) О правах и пользователях. Вниманию админу.
Файл mail.php в описанной выше конфигурации (5 пункт) будет запущен от
пользователя/группы daemon:daemon (это не рут). Если это опасно, то с помощью
команды "su" измените пользователя на нужного. Пример: su юзер -c
команда. Либо воспользуйтесь sudo или спец битом у файла
mail.php. -- II -- ТеорияИтак, мы пишем робота. Как мы определились выше, это будет программа на PHP,
которая должна анализировать письма. Разумеется, не все сразу, а по очереди. Нам
могут дать почту в двух видах: либо один файл с кучей писем (от 0 писем и
более), либо файл с одним письмом (не более 1 письма). Второе разумеется
удобнее, но не всегда доступно.
Давайте усвоим, что почтовый робот в данной статье - это программа, которая
должна уметь получтать письма в виде файла (текст-примера выше). Как разбить
данный текст на заголовок и тело, как вырезать из заголовока поля - это все
относится к программированию, а не к веб-технологиям. Мы тут изучаем именно
технологии. Подготовим ПХП для запуска роботаКак вы понимаете, мы пишем не веб-скрипт, который будет активироваться по
желанию посетителя, который мышкой кликает по ссылкам, а по какому событию. В
соответствии с этим, к примеру, не может идти речи о получении ИП-адреса
посетителя или куках. Почтовый робот - это совершенно другая история. В его
задачу входит найти файл с письмом(писами) и обработать.
Вариант 2: без CRON, без Command, метод почты из
файла. -- III -- Подведем итогМы узнали о разных способах получения почты:
Мы узнали, как что-то делать регулярно:
Эти способы можно комбинировать. Главное - не впадать в панику, понять теорию
и сесть писать программу. О конкретных непонятных вещах всегда можно спросить.
| ||||