PHP

Управление сайтом через почту. Пример работы с IMAP протоколом в PHP

Вступление
Управление сайтом через почтуУже давно у меня чесались руки разобраться с протоколами работы с почтой, когда я уже публиковал статью по отправке писем через протокол 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;
    }
}

Вот и все, этот простой скрипт позволит управлять вашим сайтом или скриптом через почту. А какие выполнять действия, это уже придумайте сами, у кого, на что хватит фантазии.
Теги:
IMAP
Добавлено: 09 Мая 2018 15:04:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...