Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • 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 !

Postifix: recapitare un messaggio ad un indirizzo email alternativo, in una coda di invio

di :: 14 febbraio 2020
Postifix: recapitare un messaggio ad un indirizzo email alternativo, in una coda di invio

Ci siamo accorti, dopo l'invio di una newsletter e quindi con una coda ("queue") già creata, che l'indirizzo email di uno dei destinatari è errato?

Interveniamo subito seguendo questi step!

1: Individuiamo il messaggio incriminato

La email che vogliamo individuare è la seguente: pippo@libero.it
La vogliamo modificare in pluto@libero.it

Possiamo visualizzare la coda di Postfix con il seguente comando:

postqueue -p

il risultato sarà la lista dei messaggi accodati, simil questa:

.............
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
.............

Ogni messaggio accodato, come possiamo vedere, presenta più righe, ed è identificato da un codice identificativo univoco: dobbiamo estrarre il codice del messaggio inviato a "pippo@libero.it".

In presenza di pochi messaggi, il problema non sussiste, lo possiamo individuare subito, ma in presenza di centinaia o migliaia di messaggi?

Per questo scopo utilizziamo il comando "postqueue -p" combinato con "grep" in questo modo

postqueue  -p | grep 'pippo@libero.it' -B 2

"postqueue  -p" estrae la coda completa dei nostri invii
"grep"  filtra la coda

Così facendo otteniamo la seguente riga.

AC43A14B65     7989 Thu Feb 13 20:07:51  sender@miosito.it

Quello che ci interessa è l'identificato del messaggio accodato, cioè "AC43A14B65".

2: Congeliamo l'invio del messaggio

Modifichiamo lo stato di invio di questo messaggio che è, ad esempio, in stato "attivo" (in attesa di invio) o "deferred" (se l'invio è stato differito perchè nel frattemp Postfix non è stato in grado di recapitare perchè, ad esempio, il server di destinazione ha respinto la ricezione), nello stato "hold".

I messaggi in stato "hold" non vengono spediti, e neppure cancellati: l'invio viene semplicemente sospeso.

Per fare questo utilizziamo il comando "postsuper -h" seguito dall'indentificativo dell'invio

postsuper -h AC43A14B65

3: Estraggo il contenuto del messaggio

A questo punto, sospeso l'invio del messaggio, andiamo ad estraree il contenuto dello stesso, salvandolo in un file temporaneo con un nome a nostra scelta, ad esempio "invio.eml" ("eml" è l'estensione comune dei file email, apribile ad esempio con un client di posta come Thunberbird).

Utilizziamo il comando "postcat" per leggere il contenuto del messaggio, e salvarlo nel file temporaneo.

postcat -qbh AC43A14B65 > /tmp/invio.eml

4: Modifichiamo il destinario del messaggio

Adesso che abbiamo la nostre email "fisicamente" salvata, andiamo a reinviarla modificando il destinario, da "pippo@libero.it" a "pluto@libero.it"

sendmail -f sender@miosito.it pluto@libero.it < /tmp/m.eml

"sendmail" invia la email dal mittente "sender@miosito.it", che è il mittente originario (e non abbiamo bisogno di modificarlo), al nuovo destinario "pluto@libero.it"

Così facendo abbiamo inviato la email al nuovo indirizzo!

5: Cancelliamo il "vecchio" messaggio

Infine, non dimentichiamoci del messaggio messo in stato "hold"... resterà li all'infinito se non la cancelliamo.

Cancelliamolo, visto che adesso non ci serve più, con il comando "postuser -d" seguito dall'identificato dell'invio.

postsuper -d  AC43A14B65

Bene, il nostro lavoro è così ultimato.

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