Migliorare il parsing delle email di Mailman

Abbiamo notato su un paio di forum che utilizzano Discourse per rispecchiare una mailing list pubblica che alcuni post vengono attribuiti all’utente sbagliato:


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

In questo caso, Discourse ha inizialmente creato un utente con il nome “Austin Ziegler via ruby-talk” con un indirizzo email corrispondente all’indirizzo di invio della lista, ed è quello che viene visualizzato per ogni post di questo tipo.


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

In questo caso, Discourse ha inizialmente creato un utente con il nome “Mailman” con un indirizzo email corrispondente all’indirizzo di invio della lista.

Dopo un’indagine, il nostro parsing delle email è a volte errato. La causa è che per la conformità DMARC, Mailman cambierà a volte l’intestazione From con se stesso e inserirà il mittente originale nel 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>

ma lo lascerà quando non è necessario modificarlo:

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

Sembra che ci siano molte opzioni di comportamento diverse, quindi vorremmo elaborare un algoritmo per analizzare correttamente ciò che Mailman invia in ogni singolo caso.

Ci sono potenzialmente altre opzioni, ad esempio Mailman potrebbe inviare il messaggio non modificato direttamente a un’istanza Discourse, ma queste sono più complesse da configurare e potrebbero non essere disponibili per tutti.

Ecco l’inizio di uno:

  • se mailman-version < 3
    • se uno qualsiasi di:
      • L’indirizzo From corrisponde a List-Id
      • L’indirizzo From corrisponde a List-Post
      • L’indirizzo From corrisponde a X-BeenThere
    • allora usa Reply-To come From
  • se mailman-version >= 3
    • se X-MailFrom esiste
      • Usa il nome dall’intestazione From, rimuovendo /via .*/
      • Usa l’email da X-MailFrom

Inoltre, una volta che tutto questo sarà finito, sarà possibile avere un task rake per rielaborare i post esistenti (probabilmente solo quelli corrispondenti all’utente errato) con questa nuova logica?

4 Mi Piace

Il succo è che ho ideato un algoritmo che funziona per tutte le versioni (che ho visto in circolazione).

  1. Ottieni l’indirizzo email della mailing list dall’header List-Post o X-BeenThere.
  2. L’email del mittente sarà in uno dei seguenti header: From, Reply-To, X-MailFrom o X-Original-From. Quindi scorri questi e restituisci il primo che non corrisponde all’indirizzo email della mailing list.
3 Mi Piace

Sembra funzionare alla grande! :+1:
Ho usato rake emails:fix_mailman_users per correggere tutti i post che erano stati attribuiti all’utente sbagliato su https://rubytalk.org/

2 Mi Piace

Questo argomento è stato chiuso automaticamente 2 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.