Mailmanのメール解析の改善

Discourse を使用して公開メーリングリストをミラーリングしているフォーラムで、一部の投稿が誤ったユーザーに紐付けられていることが確認されました。


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

この場合、Discourse は最初に「Austin Ziegler via ruby-talk」という名前で、メーリングリストの投稿アドレスと一致するメールアドレスを持つユーザーをステージングし、それがすべての投稿で表示されます。


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

この場合、Discourse は最初に「Mailman」という名前で、メーリングリストの投稿アドレスと一致するメールアドレスを持つユーザーをステージングしました。

調査の結果、メールの解析が時々不正確であることが判明しました。原因は、DMARC コンプライアンスのために、Mailman が時々 From ヘッダーを自身に変更し、元の送信者を 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>

しかし、変更する必要がない場合はそのままにします。

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

ここではさまざまな動作オプションがあるようですので、Mailman が送信するものをすべてのケースで正しく解析するアルゴリズムを考案したいと思います。

他にもオプションがある可能性があります。例えば、Mailman は変更されていないメッセージを直接 Discourse インスタンスに投稿できますが、それらは設定がより複雑で、誰でも利用できるとは限りません。

ここにその一部を示します。

  • mailman-version < 3 の場合
    • 次のいずれかに一致する場合:
      • From アドレスが List-Id に一致する
      • From アドレスが List-Post に一致する
      • From アドレスが X-BeenThere に一致する
    • Reply-To を From として使用する
  • mailman-version >= 3 の場合
    • X-MailFrom が存在する場合
      • From ヘッダーの名前を使用し、/via .*/ を削除する
      • X-MailFrom のメールアドレスを使用する

また、これがすべて完了したら、この新しいロジックで既存の投稿(おそらくエラーのあるユーザーに一致する投稿のみ)を再処理するための rake タスクを用意することは可能でしょうか?

「いいね!」 4

要点は、私が(実際に確認できた)すべてのバージョンで機能するアルゴリズムを考案したことです。

  1. List-Post または X-BeenThere ヘッダーからメーリングリストのメールアドレスを取得します。
  2. 送信者のメールは、FromReply-ToX-MailFrom、または X-Original-From のいずれかのヘッダーに含まれます。それらを反復処理し、メーリングリストのメールアドレスと一致しない最初のものを返します。
「いいね!」 3

これは素晴らしいようです! :+1:
https://rubytalk.org/ で、間違ったユーザーに帰属していたすべての投稿を修正するために rake emails:fix_mailman_users を使用しました。

「いいね!」 2

このトピックは、最後の返信から2日後に自動的に閉じられました。新しい返信は許可されていません。