2.8.1.6. Удаление старых писем из почтового ящика

Внимание!

При большом объёме почтового ящика скрипт может не успеть удалить письма за один проход и может потребоваться повторный запуск.
  1. <?php
  2. $host = isset($argv[1]) ? $argv[1] : "mail.adm.tools:143";
  3. $user = isset($argv[2]) ? $argv[2] : "user@example.com";
  4. $password = isset($argv[3]) ? $argv[3] : "example_password";
  5. $days = isset($argv[4]) ? $argv[4] : 120;
  6.  
  7. $time = strtotime(date("Y-m-d") . " - " . $days . " days");
  8. $date = date("Y-m-d", $time);
  9.  
  10. $mbox = imap_open("{" . $host . "/novalidate-cert}INBOX", $user, $password) or die("Can't connect: " . imap_last_error());
  11.  
  12. try {
  13. if (empty(imap_check($mbox))) { throw new Exception("Error is occurred"); }
  14. $emails = imap_search($mbox,'BEFORE "' . $date . '"');
  15. if (empty($emails)) { throw new Exception("Don't have mail older then $date"); }
  16. foreach ($emails as $email_id) {
  17. imap_delete($mbox, $email_id);
  18. }
  19. imap_expunge($mbox);
  20. echo "Deleted " . count($emails) . " letters before $date", "\n";
  21. } catch (Exception $e) {
  22. echo $e->getMessage(), "\n";
  23. }

Необходимые для работы скрипта данные можно указать как в самом скрипте, так и в командной строке при запуске:

  • hostадрес и порт IMAP-сервера.
  • userназвание почтового ящика.
  • passwordпароль почтового ящика.
  • days — количество дней (письма старше указанного количества дней, будут удалены).

Запуск скрипта в консоли или задаче cron выполняется командой вида:

/usr/local/bin/php /home/example/file.php mail.adm.tools:143 admin@example.com password 30
Содержание