2.8.1.7. Видалення старих листів із поштової скриньки

Увага!

  • Скрипт видаляє листи з усіх папок поштової скриньки.
  • При великому обсязі поштової скриньки скрипт може не встигнути видалити листи за один прохід і може знадобитися повторний запуск.

Скрипт видалення листів за певний проміжок часу:

  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. $Before = isset($argv[4]) ? date("Y-m-d", strtotime($argv[4])) : date("Y-m-d", strtotime("-1 year"));
  6. $After = isset($argv[5]) ? date("Y-m-d", strtotime($argv[5])) : date("Y-m-d", strtotime("1970-01-01")); //Older date
  7.  
  8. $Before = 'BEFORE "' . $Before . '"';
  9. $After = 'SINCE "' . $After . '"';
  10.  
  11. $mbox = imap_open("{" . $Host . "/novalidate-cert}INBOX", $User, $Password) or die("Can't connect: " . imap_last_error());
  12.  
  13. try {
  14. if (empty(imap_check($mbox))) {
  15. throw new Exception("Error is occurred");
  16. }
  17.  
  18. $list = imap_list($mbox, '{'.$Host.'}', "*");
  19. foreach ($list as $mailbox) {
  20. imap_reopen($mbox, $mailbox);
  21. $emails = imap_search($mbox, "$Before $After");
  22. if (empty($emails)) {
  23. echo "Don't have mail in ".$mailbox." " . strtolower($Before)."\n";
  24. continue;
  25. }
  26. foreach ($emails as $email_id) {
  27. imap_delete($mbox, $email_id);
  28. '/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m',
  29. imap_fetchheader($mbox, $email_id),
  30. $matches
  31. );
  32. $headers = array_combine($matches[1], $matches[2]);
  33. print_r("$email_id : " . imap_utf8($headers['Subject']) . " => " . $headers['Date'] . "\n<br>");
  34. }
  35. imap_expunge($mbox);
  36. echo "Deleted " . count($emails) . " letters " . strtolower($Before) . "\n";
  37. }
  38.  
  39. } catch (Exception $e) {
  40. echo $e->getMessage(), "\n";
  41. }

Дані для роботи скрипта можна вказувати безпосередньо в його коді або командному рядку при запуску:

  • Hostадреса і порт IMAP-сервера.
  • Userназва поштової скриньки.
  • Passwordпароль поштової скриньки.
  • Before — дата «до». Видалятимуться листи, які були отримані до цієї дати.
  • After — дата «після». Видалятимуться листи, які були отримані після цієї дати.

Дати можна вказувати у форматі РРРР-ММ-ДД або як кількість часу від поточної дати у форматі -1 year, -1 month або -1 day.

Приклад команди запуску скрипта в консолі або cron:

/usr/local/bin/php /home/example/file.php mail.adm.tools:143 admin@example.com "password" "2022-03-24" "2015-04-28"
Зміст