• seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Gestire la coda di Postfix

di :: 15 febbraio 2020
Gestire la coda di Postfix

Postfix è uno tra i più diffusi mail server utilizzati.

In questo articolo ci concentriamo su come gestire una coda di posta, cioè di cosa succede nel momento in cui cerchiamo di inviare un messaggio.

Postfix ha cinque diverse code di invio, di seguito elencate, e per ogni coda viene dedicata una specifica cartella sul server.

Tutti i messaggi che gestisce Postfix rimarranno nel server in una di queste code, fino a quando il messaggio non verrà eliminato dal server:

  • maildrop
  • incoming
  • active
  • deferred
  • hold
  • corrupt

Le cartelle dedicate a queste code sono localizzate sotto la directory "/var/spool/postfix/" e nello specifico sono

  • /var/spool/postfix/maildrop
  • /var/spool/postfix/incoming
  • /var/spool/postfix/active
  • /var/spool/postfix/deferred
  • /var/spool/postfix/hold
  • /var/spool/postfix/corrupt

Vediamo in breve il significato di ognuna di queste code.

Ipotizziamo di inviare una newsletter a 10.000 utenti, quindi stiamo lanciando 10.000 email

La coda MAILDROP

Prima di procedere all'invio viene verificato, per ogni messaggio, la correttezza della formattazione e la presenza di errori. In questa fase i messaggi sono salvati in questa coda / cartella.

La coda INCOMING

Superata la fate di controllo di formattazione, i messaggi vengono parcheggiati in questa coda / cartella, nell'attesa che la coda ACTIVE (quella che effettivamente invia i messaggi) si liberi.

La coda ACTIVE

Nella coda ATTIVA sono presenti i messaggi pronti per l'invio, quindi in procinto di essere spediti. E' la fase più delicata, e questa cartella ha dimensioni ridotte rispetto alle altre. Ecco perchè esiste la coda INCOMING: i messaggi sono parcheggiati li fino a quando la coda ACTIVE si libera!

La coda DEFERRED

Qui vengono parcheggiati i messaggi di cui è stato tentato l'invio, ma è fallito, ad esempio perchè il server di destinazione ha respinto la ricezione.

Nella configurazione di Postfix possiamo definire il tempo che dovrà intercorrere tra l'inserimento in questa coda e il reinserimento nella coda ATTIVA.

Ecco un esempio di log di Postix di invio fallito, e quindi inserito nella coda DIFFERITA: in questo caso il server di destinazione, per la sua policy, ha respinto la ricezione perchè gli abbiamo un numero eccessivo di email in un certo intervallo di tempo !

7F70E147A1     8067 Thu Feb 13 20:06:24  sender@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])
                                         luca@libero.it

La coda HOLD

Presenta i messaggi che abbiamo volutamente "congelato", cioè il cui invio è stato momentaneamente sospeso, ad esempio perchè prima di inviarli vogliamo apportare modifiche alla configurazione di Postfix.

Rimarranno in questa coda fino a quando non li rimettermo nella coda attiva.

La coda CORRUPT

In questa coda / cartella finiscono i messaggi che, dopo la verifica, risultano essere danneggiati, presentano errori al loro interno, e non possono quindi essere spediti.

Dopo questa panoramica sui tipi di code di POSTFIX, vediamo come verificare o gestire una coda.

Visualizzare la coda di Postfix

Per visualizzare la lista di messaggi in coda, utilizziamo questo comando

postqueue -p

O in alternativa

mailq

O ancora

sendmail -bp

Sono tutti comandi equivalenti

Il risultato è la lista di tutti i messaggi accodati, simile a questa, dove ogni messaggio presenta alcune righe con varie informazioni tra cui un identificativo univoco (ad esempio "A77B31473D")

.............
A77B31473D     8050 Thu Feb 13 20:05:14  sender@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])
                                         andrea@libero.it

AC43A14B65     7989 Thu Feb 13 20:07:51  sender@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

A0C2C14BF5     7998 Thu Feb 13 20:08:15  sender@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])
                                         mario@libero.it

7F70E147A1     8067 Thu Feb 13 20:06:24  sender@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])
                                         luca@libero.it

7805514757     8044 Thu Feb 13 20:05:35  sender@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])
                                         giulio@libero.com
.............

L'identificativo univoco è fondamentale per la gestione della coda

Visualizzare il contenuto di un messaggio in coda

Grazie all'identificativo univoco possiamo aprire il contenuto di un messaggio, includi gli headers, come segue

postcat -q {ID CODA}

dove al posto di {ID CODA} mettete l'identificativo univoco del messaggio, ad esempio

postcat -q A77B31473D

Visualizzare il numero di messaggi accodati

Per conoscere il numero di email accodate, o attendiamo per il comando "postqueue -p" venga ultimato. Al fondo infatti è presente il numero di messaggi accodati.

Oppure, più rapidamente, utilizziamo

postqueue -p | grep -c "^[A-Z0-9]"

Statistica sui messaggi accodati per dominio

Un comdando che utilizzo molto, per avere una vista globale dei messaggi accodati, raggruppati per dominio è il seguente

qshape

Abbiamo con "deferred" ci informa di tutti i messaggi con coda differita, per dominio. E' uno dei miei comandi preferiti!

qshape deferred

Il risultato sarà ad esempio

                   T  5 10 20 40 80 160 320 640 1280 1280+
           TOTAL 280  0  0  0  0  0   0   0   0    0   280
       libero.it 252  0  0  0  0  0   0   0   0    0   252
       gmail.com   7  0  0  0  0  0   0   0   0    0     7
      icloud.com   7  0  0  0  0  0   0   0   0    0     7
        alice.it   1  0  0  0  0  0   0   0   0    0     1
        liero.it   1  0  0  0  0  0   0   0   0    0     1
       gmailc.om   1  0  0  0  0  0   0   0   0    0     1
      interno.it   1  0  0  0  0  0   0   0   0    0     1
      luibero.it   1  0  0  0  0  0   0   0   0    0     1
     fideuram.it   1  0  0  0  0  0   0   0   0    0     1
     outlool.com   1  0  0  0  0  0   0   0   0    0     1
     patheon.com   1  0  0  0  0  0   0   0   0    0     1
    spinvest.com   1  0  0  0  0  0   0   0   0    0     1

Rilanciare una coda

Per rilanciare una coda differita, senza attendere i tempi previsti dalla configurazione di Postifix utilizziamo

postqueue -f

Oppure in alternativa

postfix flush

Cancellare una coda

Per cancellare tutti i messaggi in coda utilizziamo

postsuper -d ALL

Per cancellare solo i messaggi differiti utilizziamo

postsuper -d ALL deferred

Per cancellare uno specifico messaggio, utilizziamo il suo identificativo, ad esempio

postsuper -d A77B31473D

Cancellare tutti i messaggi la cui coda contiene una specifica stringa

Se ad esempio volessimo cancellare dalla coda tutti i messaggi il cui invio è stato differito per "delivery temporarily suspended", possiamo utilizziare una combinazione di comandi come questa

postqueue -p | grep -v '^\-' | awk '/^$/{print ""}{printf $0" "}' | grep 'delivery temporarily suspended' | awk '{gsub(/!|\*/, "", $1); print $1}' | postsuper -d -

Sospendere l'invio dei messaggi (coda HOLD)

Se volessimo temporaneamente sospendere l'invio dei messaggi, perchp ad esempio dobbiamo apportare una modifica alla configurazione di Postfix, possiamo spostarli nella coda HOLD, in questo modo

postsuper -h ALL

I messaggi non verranno cancellati, ma tolti dalla coda attiva, in attesa di essere rilanciati.

Per rimetterli nella coda attiva utilizziamo

postsuper -H ALL

Per sospendere l'invio della coda DEFERRED:

postsuper -h ALL deferred

e per riaccordarli

postsuper -H ALL deferred

E per ultimo, se vogliamo congelare l'invio dei messaggi destinati ad uno specifico dominio, ad esempio "libero.it"

postqueue -p | grep -v '^\-' | awk '/^$/{print ""}{printf $0" "}' | grep '@libero.it' | awk '{gsub(/!|\*/, "", $1); print $1}' | postsuper -h -

Rimandiamo ad altri articoli, altri esempi di gestione della coda.

Potrebbe interessarti

 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

 
 
 
x

ATTENZIONE