автоматизируем очистку почтового ящика по-расписанию

собственно subj, на примере яндекса

я хочу удалять с сервера старые письма (старше недели) с уведомлениями, которые у меня накапливаются в отдельной папке

для начала идём в настройки безопасности https://id.yandex.ru/security

выбираем «Пароли приложений» https://id.yandex.ru/profile/apppasswords-list

и создаем новый пароль для приложения, нам требуется сгенерить пароль для доступа к Почте, указываем понятное нам название и генерим пароль

на самом деле — это очень правильно, т. к. мы не будем хранить в ком-то скрипте свой основной пароль в открытом виде

а дальше, собственно, сам скрипт

<?php
$auth_mail = 'user@yandex.ru'; // логин
$auth_pass = '$tr0ngP@$$w0rd'; // пароль
$server = '{imap.yandex.ru:993/imap/ssl}'.'INBOX'; // подключение к серверу к папке входящие
$filter_str = 'BEFORE "'.date('d-M-Y', strtotime('-7 days')).'"'; // фильтр, чтобы получить письма старше 7 дней

$imap = imap_open($server, $auth_mail, $auth_pass) or die("Не удалось подключиться: ".imap_last_error());
// подключаемся
$some = imap_search($imap, $filter_str);
// применяем фильтр
if ($some !== false) {
// если что-то нашли - в цикле обходим
	foreach ($some as $msg_id)
		{ //  и помечаем на удаление каждое письмо с его id
			echo "delete message #".$msg_id."\n";
			imap_delete($imap, $msg_id);
		}
}
// окончательно удаляем отмеченные письма и отключаемся
imap_expunge($imap);
imap_close($imap);
?>

обратите внимание, я в переменную «$server» добавил строку из двух частей, вторая чать в примере подключит вас к папке «Входящие», если вам надо выбрать другую папку — укажите свой путь, например:

INBOX|&BCEEPgRGBEEENQRCBDg- — это папка Входящие — Соцсети, записанная в кодировке UTF7-IMAP

список папок можно получить командой

$list = imap_list($imap, "{imap.yandex.ru}", "*");
if (is_array($list)) {
	foreach ($list as $val) {
		echo mb_convert_encoding($val, "UTF-8", "UTF7-IMAP")."\n";
		echo $val."\n\n";
	}
}

первой строкой будет выводится декодированное (читабельное) название, второй строкой исходное, которое и надо будет подставлять в свой скрипт выше

Отправить
Поделиться
Запинить