Postfix: cambia mittente nei messaggi in coda


8

A seguito di una reinstallazione completa abbiamo riscontrato un problema con la configurazione: l'indirizzo del mittente era errato e alcuni destinatari (server di posta) li hanno respinti.

Quindi ci sono un sacco di mail bloccate nella coda di Postfix.

Idealmente, una modifica dell'indirizzo del mittente direttamente nelle mail in coda e quindi lo svuotamento della coda sarebbe ottimale.

Ho provato questa risposta che risolve proprio questo problema. Ma i messaggi non sembrano essere facilmente modificabili nella versione che ho (2.11.0).

Ad esempio non c'è /var/spool/mqueuedir, ma, invece,/var/spool/postfix/...

active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr

e il dir di interesse è deferred. Ho provato a modificare alcuni file lì cambiando il dominio sbagliato con quello corretto (e sono stato attento a garantire che solo quelli fossero cambiati).

Ma poi, quelle mail sono state spostate corrupt, il che significa che un semplice cambio di testo non sembra funzionare (fatto con vi).

Qualche altro modo più pulito per cambiare il mittente nelle mail in coda?

Risposte:


19

Ho provato questa risposta che risolve proprio questo problema. Ma i messaggi non sembrano essere facilmente modificabili nella versione che ho (2.11.0).

Per esempio non c'è dir / var / spool / mqueue dir, ma, invece, / var / spool / postfix / ...

Voglio chiarire due cose.

  • Innanzitutto, quella risposta è stata applicata a sendmail NON postfix.
  • In secondo luogo, i file di manipolazione diretta di file di coda non erano affatto supportati.

Quindi, hai diverse opzioni qui

1. parametro smtp_generic_maps

Questa risposta si ispira a questa risposta eccellente . Riscriverà automaticamente il vecchio indirizzo al nuovo indirizzo. È possibile definire il file per mappare il vecchio indirizzo al nuovo indirizzo.

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    account@localdomain.example.com       account@example.com

Non dimenticare di postmap /etc/postfix/genericcorrerepostfix reload

  • Upside: non è necessario riprogrammare il messaggio
  • Unico inconveniente: Postfix riscriverà l' indirizzo del mittente e del destinatario corrispondente account@localdomain.example.com.

2. indirizzo_mittente_canonico

Per superare il rovescio della medaglia della prima opzione, è possibile utilizzare sender_canonical_maps. Questa soluzione si basa sul suggerimento dell'autore Postfix . Come per la prima opzione, puoi definire il file per mappare il vecchio indirizzo al nuovo indirizzo.

/etc/postfix/main.cf:
    sender_canonical_maps = hash:/etc/postfix/sender_canonical

/etc/postfix/sender_canonical:
    account@localdomain.example.com       account@example.com

Esegui postmap /etc/postfix/sender_canonicalquindi corri postfix reload. A causa del flusso della coda postfix, è necessario ricodificare la coda interessata con il comandopostsuper -r queueid

  • Upside: Postfix non riscrive l'indirizzo del destinatario.
  • Unico inconveniente : è necessario rivedere tutto il messaggio interessato. Ma puoi rimettere in coda tutti i rinviati con un singolo comandopostsuper -r ALL deferred

3. manipolazione diretta della coda postfix

Si tratta di vecchi modi manuali per modificare la coda per l'elaborazione avanzata. Questa risposta è arrivata dalle mailing list degli utenti postfix

In breve

  • Estrai coda

    # postsuper -h queueid
    # postcat -qbh queueid > tempfile.eml
    # vi tempfile.eml
    
  • Reinvia la coda ed elimina la vecchia coda

    # sendmail -f $sender $recipient < tempfile.eml
    # postsuper -d queueid
    

Per la documentazione del comando precedente, fare riferimento a questa pagina

Nota:
soluzione originale dalle mailing list degli utenti postfix , utilizza postcat -q queueid >tempfileper estrarre la coda. Questo comando estrarrà l'intestazione, il corpo e le meta-informazioni della coda. Come indicato in seguito Azendale , sendmailrifiuterà di inviare questa e-mail non valida a causa di meta-informazioni.

L'uso del -bhparametro oltre al qparametro farà sì che Postcat filtra l'output solo in header e body, non includendo le meta-informazioni. Un vantaggio di questo è che il tempfile è nel formato che la maggior parte dei client di posta elettronica riconosce come formato .eml, che consente di visualizzare il messaggio (modificato) risultante.


1
Ho provato questo, e almeno con la mia versione di postfix, non mi è sembrato di inviare il messaggio finché non ho usato qualcosa del genere postcat -qbh queueid >tempfile. (Vantaggio secondario: è in formato .eml quindi.) Se lo avessi appena usato -q, sembrava non fare nulla quando ho eseguito sendmail. Postfix versione 2.8.4. Qualcuno può confermare questo? In tal caso, modifichiamo questa risposta.
Azendale,

Ciao @Azendale, ho testato nuovamente la terza soluzione e sì, dobbiamo usarla qbhper farla funzionare. Aggiunta della spiegazione nella risposta aggiornata ... :)
masegaloeh,

Grazie ! Stavo cercando una terza soluzione come. è semplicemente perfetto!
JazZ,

1

Greate writeup. Ho avuto un problema con un server di posta che era in esecuzione da alcuni giorni con una configurazione errata e quindi c'erano molte code che dovevano essere rinviate con un nuovo destinatario. Quindi ho creato due fodere uno per scorrere in tutte le code:

Prima di tutto per trovare tutte le code, metterle in attesa, salvarle come file .eml e inviarle nuovamente:

for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -h $ID; postcat -qbh $ID > tempfile$ID.eml; sendmail -f $sender $recipient < tempfile$ID.eml; done

Secondo per eliminare le code:

for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -d $ID; done

Ricorda solo di verificare che non ci siano nuove code che non sono in attesa prima di eseguire quest'ultimo codice. Fallo emettendo questo e cerca gli ID di coda senza un '!' alla fine:

mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }'

On poteva facilmente mettere quei due liner uno in uno, ma sentivo di avere un maggiore controllo controllando che le e-mail fossero effettivamente ricevute prima di eliminare le code.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.