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 のメールアドレスを使用する
- From ヘッダーの名前を使用し、
- X-MailFrom が存在する場合
また、これがすべて完了したら、この新しいロジックで既存の投稿(おそらくエラーのあるユーザーに一致する投稿のみ)を再処理するための rake タスクを用意することは可能でしょうか?

