Управление файлами cookie, которые используются для рекламы, таких как персонализация рекламы, ремаркетинг и анализ эффективности рекламы.
2.8.1.7. Удаление старых писем из почтового ящика
Внимание!
- Этот скрипт является мощным инструментом для управления почтовыми ящиками и должен быть использован с осторожностью.
- При большом объёме почтового ящика скрипт может не успеть удалить письма за один проход и может потребоваться повторный запуск.
Для работы скрипта требуется версия PHP 8.3 или ниже.
Скрипт удаления писем за определённый интервал времени:
<?php
if (php_sapi_name() !== 'cli') {
die("Access Denied: This script can only be run from the command line.\n");
}
$options = getopt('', [
'hostname::',
'port::',
'ssl::',
'username:',
'password:',
'folders::',
'from-date::',
'to-date:',
]);
$hostname = isset($options['hostname']) ? $options['hostname'] : 'mail.adm.tools';
$port = isset($options['port']) ? $options['port'] : 143;
$username = $options['username'] ?? die("Error: 'username' parameter is required.\n");
$password = $options['password'] ?? die("Error: 'password' parameter is required.\n");
$ssl = isset($options['ssl']) ? $options['ssl'] : (($port == 993) ? 'y' : 'n');
$folders = isset($options['folders']) ? explode(',', $options['folders']) : ['INBOX'];
$fromDate = isset($options['from-date']) ? $options['from-date'] : '1-Jan-1970';
if (!isset($options['to-date'])) {
die("Error: 'to-date' parameter is required.\n");
}
$toDate = $options['to-date'];
$connectionString = '{' . $hostname . ':' . $port . (($ssl == 'y') ? '/imap/ssl' : '/imap') . '}';
echo "Connecting to server: $connectionString\n";
echo "Searching emails in folders: " . implode(', ', $folders) . "\n";
foreach ($folders as $folder) {
$fullFolderName = (stripos($folder, 'INBOX') === 0) ? $folder : 'INBOX.' . $folder;
$imapStream = imap_open($connectionString . $fullFolderName, $username, $password);
if (!$imapStream) {
echo "Error: Could not open folder $fullFolderName\n";
continue;
}
$searchCriteria = 'SINCE "' . $fromDate . '" BEFORE "' . $toDate . '"';
$emails = imap_search($imapStream, $searchCriteria);
if ($emails) {
echo "Found " . count($emails) . " emails in folder $fullFolderName\n";
foreach ($emails as $emailNumber) {
$deleteStatus = imap_delete($imapStream, $emailNumber);
if ($deleteStatus) {
echo "Successfully deleted email with ID $emailNumber in folder $fullFolderName\n";
} else {
echo "Error deleting email with ID $emailNumber in folder $fullFolderName\n";
}
}
imap_expunge($imapStream);
} else {
echo "No emails found in folder $fullFolderName matching criteria\n";
}
imap_close($imapStream);
}
echo "Done.\n";
Аргументы командной строки при запуске скрипта:
hostname— адрес IMAP-сервера (по умолчаниюmail.adm.tools).port— порт сервера (по умолчанию143).ssl— принудительное использование SSL (y— использовать,n— не использовать).username(обязательный параметр) — адрес почтового ящика.password(обязательный параметр) — пароль почтового ящика.folders— папки для поиска и удаления писем (по умолчанию папка входящихINBOX).from-date— с какой даты удалять письма в форматеДень-Месяц-Год(по умолчанию1-Jan-1970).to-date(обязательный параметр) — по какую дату удалять письма в форматеДень-Месяц-Год.
Пример команды запуска скрипта в консоли или cron:
/usr/local/bin/php /home/example/file.php --hostname="mail.example.com" --port=993 --ssl=y --username="your-email@example.com" --password="your-email-password" --folders="INBOX,Sent" --from-date="1-Jan-2025" --to-date="1-Jan-2025"
(1)