78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
|
#!/usr/bin/env php
|
||
|
<?php
|
||
|
|
||
|
echo "-- Debut de ".__FILE__."\n";
|
||
|
|
||
|
// Chemin vers le fichier de log
|
||
|
$logFile = '/var/log/mail.log';
|
||
|
// Chemin vers le fichier pour stocker les IDs traités
|
||
|
$processedIdsFile = '/var/log/processed_ids_deferred.txt';
|
||
|
|
||
|
// Fonction pour lire les IDs traités à partir du fichier
|
||
|
function readProcessedIds($file) {
|
||
|
if (!file_exists($file)) {
|
||
|
return [];
|
||
|
}
|
||
|
$content = file_get_contents($file);
|
||
|
return $content ? explode(PHP_EOL, trim($content)) : [];
|
||
|
}
|
||
|
|
||
|
// Fonction pour écrire les IDs traités dans le fichier
|
||
|
function writeProcessedIds($file, $ids) {
|
||
|
file_put_contents($file, implode(PHP_EOL, $ids) . PHP_EOL);
|
||
|
}
|
||
|
|
||
|
// Lire les IDs déjà traités
|
||
|
$processedIds = readProcessedIds($processedIdsFile);
|
||
|
|
||
|
// Expression régulière pour trouver les messages d'erreur spécifiques avec status=deferred et extraire l'ID du message
|
||
|
$pattern = '/postfix\/smtp\[\d+\]: (\w+): .* status=deferred /';
|
||
|
|
||
|
// Lire le fichier de log
|
||
|
$logContent = file_get_contents($logFile);
|
||
|
|
||
|
if ($logContent === false) {
|
||
|
die("Erreur lors de la lecture du fichier de log.\n");
|
||
|
}
|
||
|
|
||
|
// Rechercher les correspondances
|
||
|
preg_match_all($pattern, $logContent, $matches);
|
||
|
|
||
|
// Extraire les IDs de message
|
||
|
$messageIds = array_unique($matches[1]);
|
||
|
|
||
|
if (empty($messageIds)) {
|
||
|
echo "Aucun message à supprimer de la file d'attente.\n";
|
||
|
echo "-- Fin de ".__FILE__."\n";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
// Filtrer les IDs pour ne conserver que ceux qui n'ont pas encore été traités
|
||
|
$newMessageIds = array_diff($messageIds, $processedIds);
|
||
|
if (empty($newMessageIds)) {
|
||
|
echo "Tous les messages ont déjà été traités.\n";
|
||
|
echo "-- Fin de ".__FILE__."\n";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
// Supprimer les messages de la file d'attente
|
||
|
foreach ($newMessageIds as $messageId) {
|
||
|
$command = "postsuper -d $messageId";
|
||
|
$output = [];
|
||
|
$return_var = 0;
|
||
|
exec($command, $output, $return_var);
|
||
|
|
||
|
if ($return_var === 0) {
|
||
|
echo "Message $messageId supprimé de la file d'attente.\n";
|
||
|
$processedIds[] = $messageId;
|
||
|
} else {
|
||
|
echo "Erreur lors de la suppression du message $messageId de la file d'attente.\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Mettre à jour le fichier des IDs traités
|
||
|
writeProcessedIds($processedIdsFile, $processedIds);
|
||
|
|
||
|
echo "-- Fin de ".__FILE__."\n";
|
||
|
|