Amélioration de l'analyse des e-mails Mailman

Nous avons remarqué sur quelques forums qui utilisent Discourse pour refléter une liste de diffusion publique que certains messages sont attribués au mauvais utilisateur :


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

Dans ce cas, Discourse a d’abord créé un utilisateur nommé « Austin Ziegler via ruby-talk » avec une adresse e-mail correspondant à l’adresse de soumission de la liste, et c’est ce qui s’affiche pour chaque message de ce type.


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

Dans ce cas, Discourse a d’abord créé un utilisateur nommé « Mailman » avec une adresse e-mail correspondant à l’adresse de soumission de la liste.

Après enquête, notre analyse des e-mails est parfois incorrecte. La cause est que pour la conformité DMARC, Mailman se remplace parfois dans l’en-tête From et place l’expéditeur d’origine dans le 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>

mais le laisse lorsqu’il n’a pas besoin de changer :

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

Il semble y avoir beaucoup d’options de comportement différentes ici, nous aimerions donc proposer un algorithme pour analyser correctement ce que Mailman envoie dans tous les cas.

Il existe potentiellement d’autres options, par exemple Mailman pourrait publier le message inchangé directement sur une instance Discourse, mais celles-ci sont plus complexes à configurer et peuvent ne pas être disponibles pour tout le monde.

Voici le début d’un algorithme :

  • si mailman-version < 3
    • si l’une des conditions suivantes est remplie :
      • L’adresse From correspond à List-Id
      • L’adresse From correspond à List-Post
      • L’adresse From correspond à X-BeenThere
    • alors utiliser Reply-To comme From
  • si mailman-version >= 3
    • si X-MailFrom existe
      • Utiliser le nom de l’en-tête From, en supprimant /via .*/
      • Utiliser l’e-mail de X-MailFrom

De plus, une fois tout cela terminé, sera-t-il possible d’avoir une tâche rake pour retraiter les messages existants (probablement uniquement ceux correspondant à l’utilisateur erroné) avec cette nouvelle logique ?

4 « J'aime »

L’essentiel est que j’ai trouvé un algorithme qui fonctionne pour toutes les versions (que j’ai vues en circulation).

  1. Obtenez l’adresse e-mail de la liste de diffusion à partir de l’en-tête List-Post ou X-BeenThere.
  2. L’e-mail de l’expéditeur se trouvera dans l’un des en-têtes suivants : From, Reply-To, X-MailFrom ou X-Original-From. Parcourez donc ceux-ci et renvoyez le premier qui ne correspond pas à l’adresse e-mail de la liste de diffusion.
3 « J'aime »

Cela semble fonctionner à merveille ! :+1:
J’ai utilisé rake emails:fix_mailman_users pour corriger tous les messages qui étaient attribués au mauvais utilisateur sur https://rubytalk.org/

2 « J'aime »

Ce sujet a été automatiquement fermé 2 jours après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.