Mejorando el análisis de correo electrónico de Mailman

Hemos notado en algunos foros que usan Discourse para reflejar una lista de correo pública que algunas publicaciones se atribuyen al usuario incorrecto:


de: [ruby-talk:444110] exif - photo metadata - ruby-talk - Ruby Mailing List Mirror

En este caso, Discourse primero creó un usuario con el nombre “Austin Ziegler via ruby-talk” con una dirección de correo electrónico que coincide con la dirección de envío de la lista, y eso es lo que aparece para cada publicación de este tipo.


de: https://community.nanog.org/t/txt-att-net-outage/56955/4

En este caso, Discourse primero creó un usuario con el nombre “Mailman” con una dirección de correo electrónico que coincide con la dirección de envío de la lista.

Tras la investigación, nuestro análisis de correo es a veces incorrecto. La causa es que para el cumplimiento de DMARC, Mailman a veces cambia la cabecera From a sí mismo y pone al remitente original en el reply-to:

To: Ryan Davis via ruby-talk
X-MailFrom: tom@tomsdomain.com
X-Mailman-Version: 3.3.3
Reply-To: Ruby users <ruby-talk@ml.ruby-lang.org>
From: Tom Reilly via ruby-talk <ruby-talk@ml.ruby-lang.org>
Cc: Tom Reilly <tom@tomsdomain.com>
To: Jared Mauch <jared@jaredsdomain.com>
X-BeenThere: nanog@nanog.org
X-Mailman-Version: 2.1.39
From: Owen DeLong via NANOG <nanog@nanog.org>
Reply-To: Owen DeLong <owen@owensdomain.com>
Cc: nanog <nanog@nanog.org>

pero lo deja cuando no necesita cambiarlo:

To: Jon Lewis <ljlewis@jonsdomain.org>
X-BeenThere: nanog@nanog.org
X-Mailman-Version: 2.1.39
From: William Herrin <bill@billsdomain.us>
Cc: nanog@nanog.org

Parece que hay muchas opciones diferentes de comportamiento aquí, por lo que nos gustaría idear un algoritmo para analizar correctamente lo que Mailman envía en cada caso.

Potencialmente hay otras opciones, por ejemplo, Mailman podría publicar el mensaje sin cambios directamente en una instancia de Discourse, pero esas son más complejas de configurar y pueden no estar disponibles para todos.

Aquí está el inicio de uno:

  • si mailman-version < 3
    • si alguna de:
      • La dirección From coincide con List-Id
      • La dirección From coincide con List-Post
      • La dirección From coincide con X-BeenThere
    • entonces usar Reply-To como From
  • si mailman-version >= 3
    • si X-MailFrom existe
      • Usar el nombre de la cabecera From, eliminando /via .*/
      • Usar el correo electrónico de X-MailFrom

Además, cuando todo esto esté dicho y hecho, ¿es posible tener una tarea rake para reprocesar las publicaciones existentes (probablemente solo las que coinciden con el usuario erróneo) con esta nueva lógica?

4 Me gusta

La esencia es que he ideado un algoritmo que funciona para todas las versiones (que he visto en la naturaleza).

  1. Obtener la dirección de correo electrónico de la lista de distribución de la cabecera List-Post o X-BeenThere.
  2. El correo del remitente estará en cualquiera de las siguientes cabeceras: From, Reply-To, X-MailFrom o X-Original-From. Así que itera sobre ellas y devuelve la primera que no coincida con la dirección de correo electrónico de la lista de distribución.
3 Me gusta

¡Esto parece funcionar muy bien! :+1:
Usé rake emails:fix_mailman_users para corregir todas las publicaciones que fueron atribuidas al usuario incorrecto en https://rubytalk.org/

2 Me gusta

Este tema se cerró automáticamente 2 días después de la última respuesta. Ya no se permiten nuevas respuestas.