Verbesserung des Mailman E-Mail-Parsings

Wir haben auf einigen Foren, die Discourse verwenden, um eine öffentliche Mailingliste zu spiegeln, festgestellt, dass einige Beiträge dem falschen Benutzer zugeordnet werden:


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

In diesem Fall hat Discourse zuerst einen Benutzer mit dem Namen „Austin Ziegler via ruby-talk“ mit einer E-Mail-Adresse, die der Adresse der Listenübermittlung entspricht, angelegt, und das ist es, was für jeden Beitrag wie dieser angezeigt wird.


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

In diesem Fall hat Discourse zuerst einen Benutzer mit dem Namen „Mailman“ mit einer E-Mail-Adresse, die der Adresse der Listenübermittlung entspricht, angelegt.

Bei der Untersuchung ist unsere E-Mail-Verarbeitung manchmal falsch. Der Grund dafür ist, dass Mailman aus DMARC-Konformitätsgründen manchmal den From-Header zu sich selbst ändert und den ursprünglichen Absender in die Reply-To-Adresse einfügt:

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>

lässt es aber unverändert, wenn es nicht geändert werden muss:

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

Es scheint, dass es hier viele verschiedene Verhaltensoptionen gibt, daher möchten wir einen Algorithmus entwickeln, um das, was Mailman in jedem einzelnen Fall sendet, korrekt zu parsen.

Es gibt möglicherweise andere Optionen, zum Beispiel könnte Mailman die unveränderte Nachricht direkt an eine Discourse-Instanz senden, aber diese sind komplexer einzurichten und möglicherweise nicht für jeden verfügbar.

Hier ist der Anfang davon:

  • Wenn mailman-version < 3
    • Wenn eine der folgenden Bedingungen zutrifft:
      • From-Adresse entspricht List-Id
      • From-Adresse entspricht List-Post
      • From-Adresse entspricht X-BeenThere
    • Dann Reply-To als From verwenden
  • Wenn mailman-version >= 3
    • Wenn X-MailFrom vorhanden ist
      • Namen aus dem From-Header verwenden, /via .*/ entfernen
      • E-Mail von X-MailFrom verwenden

Ist es außerdem möglich, wenn all dies abgeschlossen ist, eine Rake-Aufgabe zu haben, die bestehende Beiträge (wahrscheinlich nur die, die dem fehlerhaften Benutzer entsprechen) mit dieser neuen Logik neu verarbeitet?

4 „Gefällt mir“

Die Kernaussage ist, dass ich einen Algorithmus entwickelt habe, der für alle (mir bekannten) Versionen funktioniert.

  1. Holen Sie sich die E-Mail-Adresse der Mailingliste entweder aus dem List-Post- oder dem X-BeenThere-Header.
  2. Die E-Mail des Absenders befindet sich in einem der folgenden Header: From, Reply-To, X-MailFrom oder X-Original-From. Iterieren Sie also über diese und geben Sie die erste zurück, die nicht mit der E-Mail-Adresse der Mailingliste übereinstimmt.
3 „Gefällt mir“

Das scheint großartig zu funktionieren! :+1:
Ich habe rake emails:fix_mailman_users verwendet, um alle Beiträge zu korrigieren, die dem falschen Benutzer auf https://rubytalk.org/ zugeordnet waren.

2 „Gefällt mir“

Dieses Thema wurde automatisch 2 Tage nach der letzten Antwort geschlossen. Neue Antworten sind nicht mehr möglich.