Postfix: come cancellare gli invii accodati (queued) e destinati ad uno specifico dominio
In questo veloce articolo vediamo come eliminare dalla coda di invio di Postfix, tutti gli invii email destinati a un singolo dominio.
Supponiamo, ad esempio, di avere inviato una newsletter ad una lista di indirizzi, tra cui abbiamo molti indirizzi destinati al dominio "libero.it".
Postfix quindi ha una coda di invio che sta processando. Da questa coda vogliamo cancellare queste email, prima che vengano inviate, al dominio "libero.it".
Ci sono altri modi per ottenere la medesimo risultato, noi utilizziamo questa combinazione di istruzioni:
mailq | grep -B3 "\@libero.it$" | grep "^[0-9A-Z]" | cut -f 1 -d ' ' | xargs -n 1 postsuper -d
Vediamo nel dettaglio il significato di queste istruzioni
- mailq
serve a visualizzare la coda di email di Postfix. E' equivalente di "postqueue -p" o di "sendmail -bp"
La coda è composta da una lista di invii. Ogni invio presenta alcune righe con alcune informazioni relative allo specifico invio, tra cui un identificativo dell'invio, la data di invio, la email di invio, la mail del destinario, ed altre informazioni. A noi interessano l'identificativo e la email del destinatario.
Questo è un esempio relativo ad una specifico invio estratto dalla lista ottenuta tramite mailq: le informazioni sono spalmate su più righe, tra cui troviamo l'indentificativo "D5CCD14AF1" e la mail del destinatario "pippo@libero.it" che è l'oggetto della nostra estrazione. Le altre informazioni non ci interessano.
D5CCD14AF1 8008 Wed Feb 12 20:22:12 info@miosito.it (delivery temporarily suspended: host smtp-in.libero.it[213.209.1.129] refused to talk to me: 451 smtp-27.iol.local smtp-27.iol.local too many invalid recipients [smtp-27.iol.local; LIB_660]) pippo@libero.it
- grep -B3 "@libero\.it$"
serve astrarre dalla lista, ottenuta al punto precedente, gli invii che contengono gli indirizzi email contenenti il dominio "libero.it" - grep "^[0-9A-Z]"
serve a estrarre le sole righe che iniziano con un ID (ad esempio "D5CCD14AF1"). A questo punto abbiamo ottenuto una lista simile a questa
........... D5CCD14AF1 8008 Wed Feb 12 20:22:12 info@miosito.it D01791386933 8012 Wed Feb 12 21:37:58 info@miosito.it D4B8D136FA3E 7986 Wed Feb 12 22:14:35 info@miosito.it D53F313A7CC9 7983 Wed Feb 12 22:14:13 info@miosito.it ...........
- cut -f 1 -d ' '
serve ad estrarre la prima parola da ogni riga, cioè l'identificativo: a noi adesso servirà solo questo!
In alternativa a questa istruzione ptoevate usare "awk {print $1}" - xargs -n 1
serve ad eseguire un comando che seuge (il "postuser -d") sulla lista di identificativi ottenuta - postuser -d
è il comando che esegue la cancellazione della coda di invii ottenuta dalle istruzioni precedenti
A voi adesso provare, vi consiglio di provare le singole istruzioni così da capire fino in fondo il risultato ottentuto.
Per vostra utilità ecco una via alternativa per ottenere lo stesso risultato:
mailq | awk 'BEGIN { RS = "" } /@libero\.it/ { print $1 }' | tr -d '*!' | postsuper -d -
A voi capirne il significato :-)