Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
PHP: Почтовый робот и CRON. Как выполнять регулярные действия в PHP.Почтовый робот - это программа, которая анализирует почту, пришедшую на определнный почтовый ящик, и производит разные действия. Основная цель этой статьи о почтовых роботах. Но раз уж тут будет упомянут крон, то и о нем. Сразу хочется предупредить, что здесь будет рассказано о множестве способов сделать одну вещь разными способами, поэтому вам придется немного думать... Это к тому, что к статьтье по отправке писем с аттачем постоянно имеют притензии разные люди, которые не умееют заполнить ни "почтовый хост провайдера", ни даже "обратный адрес". Пока вы будете читать эту статью, вы узнаете о большом количестве ньюансов и поймете, что спрашивать или объяснять в 2х словах "как сделать почтового робота?" невозможно. CRON - средство выполнять регулярные действия на серверах типа Unix. В Windows крон называют шедулером. Суть одна: делаем правила срабатывания крона, например раз в 2 минуты или в 23:59 по четвергам, и что делать, например запустить php-программу (чтобы та делала нужную работу). В форуме часто возникает вопрос "как делать что либо регулярно?". Именно крон решает эту проблему.
Способы обработки почты:Больше ничего придумать нельзя. Разве что совсем не реагировать на почту. Почтовый робот за 10 минут ("COMMAND")Для тех, кто хочет по быстрому все настроить, будет полезна данная глава. После нее начнется менее конкретная теория.Приступим. Разумеется, ваш сервер должен быть типа Unix, а не Windows. Еще вы
должны иметь PHP в виде CGI программы. Попробуйте запустить из телнета комагду
1) Ваш домашний каталог. Он не должен быть доступен из веба, т.е. не
совпадать ни с одним веб-каталогом на сервере. Например, ваши веб-страницы живут
в каталоге 2) Создайте файл робота. Он будет в нашем домашнем каталоге
3) Как это работает. Мы еще не закончили, но уже видно, как это будет работать. Во-первых, данный скрипт будет запущен только при приходу письма. Во-вторых, вам подадут письмо в готовом виде - надо только открыть входной поток (файл со спец. именем 3) Настроим права на скрипт. Файл (mail.php) должен иметь атрибуты
4) Глюк с переводом каретки. Если вы создаете файл (mail.php) в
Windows/DOS и потом копируете по FTP на сервер, глюк будет. Если создать файл
прямо из консоли сервера каким-нибудь редактором (vi, joe, mc), то глюка не
будет. Глюк заключается в разных переводых каретки. Причем надо конвертировать
перевод каретки не во всем файле, а только в первой строке:
testmail: |/home/dima/mail.php Допустим, ваш основной домен - 6) Не забудем пересоздать базу из файла
makemap hash /etc/aliases.db < /etc/aliases ; newaliases Возможно, досточно выполнить только одну из этих команд... Но так будет работь. 7) Альтернатива 5+6 пунктам (выполнить либо пункты 5+6, либо 7). Пункт
5 работает надежно - рекомендуется. А этот - может и не работать. Зато, если вы
имете телнет-доступ на сервер, можно попробовать обойтись и без админа.
Проверим, будет ли работать. Создайте файл
|/home/dima/mail.php Данный файл ( 8) Готово! Теперь шлем письмо на адрес робота и смотрим что получилось.
ТеорияИтак, мы пишем робота. Как мы определились выше, это будет программа на PHP, которая должна анализировать письма. Разумеется, не все сразу, а по очереди. Нам могут дать почту в двух видах: либо один файл с кучей писем (от 0 писем и более), либо файл с одним письмом (не более 1 письма). Второе разумеется удобнее, но не всегда доступно. Давайте посмотрим из чего состоит одно письмо. Пример:
Давайте усвоим, что почтовый робот в данной статье - это программа, которая должна уметь получтать письма в виде файла (текст-примера выше). Как разбить данный текст на заголовок и тело, как вырезать из заголовока поля - это все относится к программированию, а не к веб-технологиям. Мы тут изучаем именно технологии. В письме есть заголовок и тело. Заголовок идет с первой строки. Тело отделено
от заголовка пустой строкой. Если вам дают файл с множеством писем, то письма
разделяются довольно просто. Если строка начинается со слова
Подготовим ПХП для запуска роботаКак вы понимаете, мы пишем не веб-скрипт, который будет активироваться по желанию посетителя, который мышкой кликает по ссылкам, а по какому событию. В соответствии с этим, к примеру, не может идти речи о получении ИП-адреса посетителя или куках. Почтовый робот - это совершенно другая история. В его задачу входит найти файл с письмом(писами) и обработать.Если вы ниже выберите вариант 1 или 2, вам Апач как CGI не нужен. И наоборот
- если у вас нет Апача как CGI, то вы можете использовать только способы 1 или
2, чтобы организовать почтового робота или просто крон. В остальных случаях -
Апач как CGI вам нужен. Если вы самостоятельно этого проверить не можете,
обратитесь к администратору сервера с вопросом "Как запускать PHP в
CGI-режиме?". Если скажет - нет такого, требуйте, чтобы появился :-) В конце
концов вам от него нужно только адрес вида
Вариант 1: без CRON, без Command, метод POP3 почты. Как забрать почту с POP3 ящика. Надо изучить сокеты и POP3. Поверьте, это
просто. Чтобы понять сокеты, предствьте, что это простые файлы, в которые можно
писать и читать. Для забора почты нужно открыть сокет с сервером почты на 110
порту (порт POP3 сервера). Далее, как в файл, надо написать Теперь попробуем запускать нашу программу каждые 5 минут. К сожалению,
методами ПХП напрямую это не возможно. Но мы попробуем. Допустим, на ваш сайт
ходят люди :-) Если на ваш сайт никто не ходит, данный способ не заработает.
Нужно сделать функцию (в каком-то общем файле), которую будут запускать из всех
ваших скриптов. Функция должно проверять время модификации файла-флага,
например, Ниже идет пример, который описывает более конкретно реализацию регулярного запуска фужного скрипта. Это не конкретная программа, а реальный пример. Вариант 2: без CRON, без Command, метод почты из файла. Вариант 3: используем CRON Вариант 4: используем COMMAND - запуск по приходу письма Подведем итогМы узнали о разных способах получения почты: Мы узнали, как что-то делать регулярно: Эти способы можно комбинировать. Главное - не впадать в панику, понять теорию и сесть писать программу. О конкретных непонятных вещах всегда можно спросить. Мы узнали, что самый продвинутый и легкий способ - это метод реакции на письмо (COMMAND), первая глава. К нему нужно стремиться. Писать примеры для других вариантов не имеет смысла. Они, конечно, тоже будут работать, но... Мы узнали, что КРОН - это не страшный зверь, а файл всего с одной строкой
вида Мы узнали, что нам скорее всего понадобиться ПХП как CGI-прогармма. Все
привыкли использовать ПХП, вызываемый через веб (тут нам тип ПХП не важен -
модуль Апача или CGI). А для выполнения скрипта требуется CGI. Может кто и не
подозревал, но ПХП это отличное средство для написания разных скриптов даже у
себя на рабочем компьюетере. В Windows можно легко регулярно копировать и
упаковывать важные файлы, например (а то достал уже глючить). Вызывается проще
простого: |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рейтинги
|