Управление сайтом через почту. Пример работы с 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 протоколом в PHP: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*