Вступление
Уже давно у меня чесались руки разобраться с протоколами работы с почтой, когда я уже публиковал статью по отправке писем через протокол SMTP, а сегодня я добрался и до IMAP. Напомню, что SMTP протокол служит для передачи почты. IMAP работает в обратном направлении – служит для получения почты с сервера.
Чтобы лучше понять, возможности протокола IMAP давайте напишем простой скрипт, который будет выполняться по крону, например каждый час и будет проверять наличие новых писем, если таковые найдутся, проверим их заголовок, отправителя и прочитаем содержимое. Если содержимое будет иметь какую-нибудь команду, то выполним ее. Другими словами мы сделаем управление скриптом через почту, будем отправлять различные команды, а скрипт будет их выполнять.
Управление сайтом через почту
В этом примере я использую свою почту, которая зарегистрирована на яндексе. Этот ящик и будем проверять. Прежде чем начать работать, хочу обратить внимание на то, что не все серверы по умолчанию настроены на работу с протоколом IMAP, если у вас скрипт не будет выполнятся, то стоит проверить в настройках php, а именно в конфиге php.ini, включена ли директива extension=php_imap.dll.
Приступим к самому интересному – к разработке, ниже я привел код скрипта, который должен выполняться по крону каждый час:
// email с которого слушать команды $controlEmail = "ipatovsoft@gmail.com"; // логин $email = "zhenikipatov@yandex.ru"; // пароль $password = "******"; // соединяемся с почтовым сервером, в случае ошибки выведем ее на экран $connectImap = imap_open("{imap.yandex.ru}INBOX", $email, $password) OR die("Error:" . imap_last_error()); // проверим ящик на наличие новых писем $mails = imap_search($connectImap, 'NEW'); // если есть новые письма if($mails){ // открываем каждое новое письмо foreach($mails as $oneMail){ // получаем заголовок $header = imap_header($connectImap, $oneMail); // достаем ящик отправителя письма $mailSender = $header->sender[0]->mailbox . "@" . $header->sender[0]->host; // проверяем, тот ли ящик прислал письмо if($mailSender == $controlEmail){ // получаем заголовок письма $subject = $header->subject; // проверяем тему if($subject == "CMD"){ // получаем тело письма, в нем команда к действию // $action = imap_body($connectImap, $oneMail); // получение тела письма с заголовками и разделителями $action = imap_fetchbody($connectImap, $oneMail, 1); // получаем только текст письма // вызываем функцию, в которой определяется действие check_action(trim($action)); } } } } // закрываем соединение imap_close($connectImap); // выполнение действий function check_action($action){ // определяем какое действие выполнять switch($action){ // действие 1 case 'action_1': echo 'action_1'; break; // действие 1 case 'action_2': echo 'action_2'; break; // если не определено действие default: echo "undefined action"; break; } }
Вот и все, этот простой скрипт позволит управлять вашим сайтом или скриптом через почту. А какие выполнять действия, это уже придумайте сами, у кого, на что хватит фантазии.
Спасибо. Искал именно это.