Postfix: cambiar remitente en mensajes en cola

8

Después de una reinstalación completa, tuvimos un problema con la configuración: la dirección del remitente era incorrecta y algunos destinatarios (servidores de correo) la rechazaron.

Así que hay un montón de correos atascados en la cola de Postfix.

Idealmente, un cambio de la dirección del remitente directamente en los correos en cola y luego enjuagar la cola sería óptimo.

Intenté esta respuesta que aborda este mismo problema. Pero los mensajes no parecen ser fácilmente modificables en la versión que tengo (2.11.0).

Por ejemplo, no hay /var/spool/mqueuedirectorio, sino que, en cambio,/var/spool/postfix/...

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

y el directorio de interés es deferred. Traté de modificar algunos archivos allí cambiando el dominio incorrecto con el correcto (y tuve cuidado de asegurarme de que solo esos fueran cambiados).

Pero luego, esos correos se movieron a corrupt, lo que significa que un simple cambio de texto no parece funcionar (hecho con vi).

¿Alguna otra forma más limpia de cambiar el remitente en los correos en cola?

e2-e4
fuente

Respuestas:

19

Intenté esta respuesta que aborda este mismo problema. Pero los mensajes no parecen ser fácilmente modificables en la versión que tengo (2.11.0).

Por ejemplo, no hay / var / spool / mqueue dir, sino que / var / spool / postfix / ...

Quiero aclarar dos cosas.

  • Primero, esa respuesta se aplicó a sendmail NO postfix.
  • En segundo lugar, no se admitía en absoluto la manipulación directa de archivos de cola sin procesar.

Entonces, tienes varias opciones aquí

1. parámetro smtp_generic_maps

Esta respuesta inspirada en esta excelente respuesta . Reescribirá la dirección antigua a la nueva dirección automáticamente. Puede definir un archivo para asignar direcciones antiguas a direcciones nuevas.

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

/etc/postfix/generic:
    [email protected]       [email protected]

No te olvides de postmap /etc/postfix/genericcorrerpostfix reload

  • Al revés: no necesita solicitar el mensaje
  • Desventaja: Postfix reescribirá la dirección del remitente y del destinatario que coincida [email protected].

2. sender_canonical_address

Para superar la desventaja de la primera opción, puede usar sender_canonical_maps. Esta solución basada en la sugerencia del autor Postfix . Igual que la primera opción, puede definir un archivo para asignar direcciones antiguas a direcciones nuevas.

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

/etc/postfix/sender_canonical:
    [email protected]       [email protected]

Corre postmap /etc/postfix/sender_canonicalluego corre postfix reload. Debido al flujo de la cola de postfix, debe volver a poner en cola la cola afectada con el comandopostsuper -r queueid

  • Upside: Postfix no reescribe la dirección del destinatario.
  • Desventaja: debe solicitar todos los mensajes afectados. Pero puede solicitar todos los diferidos con un solo comandopostsuper -r ALL deferred

3. manipulación directa de la cola de postfix

Estas son formas antiguas manuales de modificar la cola para el procesamiento avanzado. Esta respuesta vino de las listas de correo de usuarios de postfix

En breve

  • Extraer cola

    # postsuper -h queueid
    # postcat -qbh queueid > tempfile.eml
    # vi tempfile.eml
    
  • Vuelva a enviar la cola y elimine la cola anterior

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

Para la documentación del comando anterior, consulte esta página

Nota:
Solución original de las listas de correo de usuarios de postfix , use postcat -q queueid >tempfilepara extraer la cola. Este comando extraerá el encabezado, el cuerpo y la metainformación de la cola. Como señaló Azendale a continuación , sendmailse negará a enviar este correo electrónico con formato incorrecto debido a la metainformación.

El uso del -bhparámetro además del qparámetro hará que postcat filtre la salida solo al encabezado y al cuerpo, sin incluir la metainformación. Un beneficio adicional de esto es que el archivo temporal está en el formato que la mayoría de los clientes de correo electrónico reconocen como formato .eml, lo que le permite ver el mensaje resultante (editado).

masegaloeh
fuente
1
Intenté esto, y al menos con mi versión de postfix, no parecía enviar el mensaje hasta que usé algo como postcat -qbh queueid >tempfile. (Beneficio adicional: entonces está en formato .eml.) Si acabo de usar -q, parecía no hacer nada cuando ejecuté sendmail. Postfix versión 2.8.4. ¿Alguien puede confirmar esto? Si es así, editemos esta respuesta.
Azendale
Hola @Azendale, vuelvo a probar la tercera solución y sí, necesitamos usarla qbhpara que funcione. Agregando la explicación en la respuesta actualizada ... :)
masegaloeh
Gracias ! Estaba buscando una tercera solución como. es perfecto!
JazZ
1

Gran escrito. Tuve un problema con un servidor de correo que había estado funcionando unos días con una configuración incorrecta y, por lo tanto, había muchas colas que debían reenviarse con el nuevo destinatario. Así que creé dos liners para recorrer todas las colas:

Primero en encontrar todas las colas, ponerlas en espera, guardarlas como archivos .eml y reenviarlas:

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

Segundo para eliminar las colas:

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

Solo recuerde verificar que no haya nuevas colas que no estén en espera antes de ejecutar este último código. Haga eso emitiendo esto y busque la identificación de la cola sin un '!' al final:

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

On podría poner fácilmente esos dos revestimientos en uno, pero sentí que tenía más control al verificar que los correos realmente se recibían antes de eliminar las colas.

Jorn
fuente