Cómo recoger rebotes en postfix

15

Esto está relacionado con esta pregunta:

linux: ¿formas de obtener un informe de recuperación para mi aplicación de boletín informativo? - Falla del servidor

Digamos que estoy generando direcciones de correo electrónico como esta cuando envío boletines para identificar rebotes y cancelar mi suscripción a mi boletín: [email protected]

Supongo que usaría esto en la ruta de retorno, ¿verdad?

Entonces, ¿cómo lo configuraría en postfix para recopilar todas estas direcciones con el prefijo "bounce-" en un buzón?

Finalmente, escuché a la gente mencionar un rebote suave versus un rebote duro. ¿Alguien puede explicar lo diferente y cómo deben contarse para saber cuándo eliminar permanentemente a alguien de un boletín electrónico?

Brian Armstrong
fuente
Tenga en cuenta que una dirección de correo electrónico que incluye la palabra "rebote" también se puede ver como "yuck" ... (spam), dicho esto, si puede pegar la suya Message-Iden su encabezado, debe devolverse y eso sería baste para comprobar quién es quién.
Alexis Wilke

Respuestas:

17

La respuesta exacta a su pregunta (manejo de la [email protected]dirección) depende de cómo esté configurado su servidor para recibir correo. Si example.comes el dominio virtual, lo mejor que puede hacer es recopilar los mensajes en el [email protected]buzón (suponiendo recipient_delimiter = -).

Si example.comes el dominio entregado localmente para el servidor (el correo se entrega a las cuentas reales del sistema), entonces puede agregar un .forwardarchivo al directorio de inicio del bounceusuario, que entrega a un programa que analiza la información de rebote y la registra en una base de datos o archivo . Consulte man localpara obtener más información sobre el .forwardformato y cómo entregarlo a un programa.

Lo que hacemos, ya que enviamos mensajes para una gran cantidad de dominios, es usarlo bounces.example.comcomo nuestro dominio VERP. Este dominio necesita ser agregado a relay_domains. Crea /etc/postfix/transport_mapscon este contenido:

bounces.example.com             bulkbounce:

Luego agregue una línea similar a esta para /etc/postfix/master.cf:

bulkbounce unix - nn - - tubería
  usuario = nadie argv = / usr / local / bin / bounce_handler.py $ {destinatario}

El bounce_handler.pyscript acepta la dirección VERP como su opción de línea de comando, la analiza y realiza las actualizaciones necesarias de la base de datos para registrar el rebote.

Insyte
fuente
Ooh, me gusta la idea de usar el delímetro receptor para agruparlos. Por lo general, se usa un + ¿verdad? Creo que funcionará muy bien, ¡gracias!
Brian Armstrong el
11

En realidad, la respuesta de Instyle es muy difícil de implementar si desea admitir muchos dominios diferentes y es incorrecta porque:

a) Con su ejemplo de transport_maps, todos los correos electrónicos enviados a ese dominio se envían a ese servicio específico sin tener en cuenta si los correos electrónicos son correos devueltos o no. Dado que usa un nombre de dominio específico, en realidad solo debería ser un correo electrónico devuelto ... pero no se puede garantizar de esa manera.

b) Los datos enviados a su script son el correo electrónico en sí y no el mensaje de devolución. En otras palabras, es posible que su código no tenga idea de por qué se rechazó el correo electrónico (es decir, el rebote local solo le enviará el correo electrónico original).


La forma correcta de hacer esa configuración en postfix es usar la clase de notificación de rebote.

1) En /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps

2) En / etc / postfix / transport_maps

# when you make changes to this file, run:
#   sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:

Como puede ver, ahora le decimos a Postfix que use [email protected]cada vez que un correo electrónico sea devuelto. Luego, en el mapa de transporte, para usar bulkbouncecomo servicio para manejar cualquier dirección de correo electrónico [email protected].

Finalmente puedes definir bulkbouncecon tu script:

3) En /etc/postfix/master.cf

bulkbounce unix -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

Este script requiere que tengas un usuario. nobodyEs una buena opción también. Si desea tener un usuario específico, puede crearlo con:

useradd bounce

Sin la secuencia de comandos master.cf, los correos electrónicos se envían a la cuenta de rebote. Entonces, si tiene un script que analiza los correos electrónicos de los archivos, esto funcionaría sin los cambios transport_mapsy master.cf.


De un comentario a continuación:

fyi - re: doble rebotes ...
si está modificando la dirección de retorno (dirección VERP como [email protected], entonces, querrá comentar la línea main.cfpara bounce_notice_recipient, si está interesado en analizar el +idrebote solo en su secuencia de comandos.

Alexis Wilke
fuente
Utilizando su forma, de alguna manera recibo el rebote dos veces, una vez con bounce + id @ ... y otra vez con bounce @ ... de doble rebote - (el rebote de usuario no existe realmente en el sistema, ya que no tengo la intención de 'guardar' estos correos electrónicos). El correo electrónico se envía con una ruta de retorno de bounce + id @ ... ¿Alguna idea de lo que me falta?
RVandersteen
@RVandersteen No estoy muy seguro de por qué lo obtendrías dos veces. ¿El que tiene +id@puede ser un sobre de algún tipo?
Alexis Wilke
Cuando uso nuestra dirección predeterminada 'desde', el rebote todavía se envía a [email protected] y [email protected] (ya no se agrega ninguna ruta de retorno)
RVandersteen
1
Para referencia futura, al agregar notify_classes no cambia el comportamiento del MTA que envía el mensaje de rebote a la ruta FROM / Return. Agrega comportamiento encima (lo envía también al notify_bounce_recipient). Esta es la razón por la que recibí correos dobles. Lo que responde a mis preguntas anteriores
RVandersteen
1
fyi - re: doble rebotes ... si está modificando la dirección de retorno (dirección VERP como '[email protected]', entonces querrá comentar la línea en main.cf para el 'bounce_notice_recipient', si está interesado en analizar el rebote + id solo en su script.
sarora
1

El software de la lista de correo más moderno ya sabe cómo manejar los mensajes VERP si el MTA está configurado correctamente para devolverlos al software de la lista de correo. En el caso de GNU Mailman , debe consultar la página de preguntas frecuentes denominada "¿Cómo utilizo VERP con un delimitador (Postfix employee_delimiter)?".

Si está haciendo su propio software de boletín personalizado para manejar esto, debe preguntarse por qué está reinventando la rueda en lugar de usar aplicaciones existentes que ya pueden manejar la tarea de manera simple y fácil para usted.

Jeremy Bouse
fuente
Sí, estoy haciendo mi propio software de boletín. ¡Hay una buena razón!
Brian Armstrong el
Entonces debería considerar que use VERP para manejar los rebotes correctamente.
Jeremy Bouse el
Hola Jeremy, creo que tienes razón. VERP es la solución estándar aquí, aunque parece que solo es útil para identificar al remitente y al destinatario. En este caso, también debemos identificar el mensaje particular que salió que causó el rebote, por lo que creo que tendremos que hacer una solución personalizada con nuestra propia ID en la dirección. Creo que la solución mencionada a continuación utilizando un delimitador de destinatario nos permitirá agruparlos en una sola cuenta de rebote. Gracias por la respuesta, aunque agradezco la ayuda.
Brian Armstrong el
La solución de Insyte es solo un VERP modificado en su núcleo. Solo necesita asegurarse de que proporcione un identificador único suficiente para que su controlador de rebote lo identifique. En la mayoría de los programas de listas de correo, esa es la dirección de correo electrónico, pero podría ser cualquier cosa ya que está diseñando la suya.
Jeremy Bouse el