Melhorando a análise de e-mail do Mailman

Temos notado em alguns fóruns que usam o Discourse para espelhar uma lista de e-mails pública que algumas postagens estão sendo atribuídas ao usuário errado:


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

Neste caso, o Discourse primeiro registrou um usuário com o nome “Austin Ziegler via ruby-talk” com um endereço de e-mail correspondente ao endereço de envio da lista, e é isso que aparece para todas as postagens como esta.


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

Neste caso, o Discourse primeiro registrou um usuário com o nome “Mailman” com um endereço de e-mail correspondente ao endereço de envio da lista.

Após investigação, nosso processamento de e-mail está às vezes incorreto. A causa é que para conformidade com DMARC, o Mailman às vezes altera o cabeçalho From para si mesmo e coloca o remetente original no 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>

mas o deixa quando não precisa mudar:

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

Parece haver muitas opções diferentes de comportamento aqui, então gostaríamos de criar um algoritmo para analisar corretamente o que o Mailman envia em todos os casos.

Existem potencialmente outras opções, por exemplo, o Mailman poderia postar a mensagem inalterada diretamente em uma instância do Discourse, mas essas são mais complexas de configurar e podem não estar disponíveis para todos.

Aqui está o início de um:

  • se mailman-version < 3
    • se algum dos seguintes:
      • O endereço From corresponde a List-Id
      • O endereço From corresponde a List-Post
      • O endereço From corresponde a X-BeenThere
    • então use Reply-To como From
  • se mailman-version >= 3
    • se X-MailFrom existe
      • Use o nome do cabeçalho From, removendo /via .*/
      • Use o e-mail de X-MailFrom

Além disso, quando tudo isso for dito e feito, é possível ter uma tarefa rake para reprocessar postagens existentes (provavelmente apenas as que correspondem ao usuário errôneo) com essa nova lógica?

4 curtidas

A essência é que criei um algoritmo que funciona para todas as versões (que vi em uso).

  1. Obtenha o endereço de e-mail da lista de mala direta do cabeçalho List-Post ou X-BeenThere.
  2. O e-mail do remetente estará em qualquer um dos seguintes cabeçalhos: From, Reply-To, X-MailFrom ou X-Original-From. Portanto, itere sobre eles e retorne o primeiro que não corresponder ao endereço de e-mail da lista de mala direta.
3 curtidas

Isso parece funcionar muito bem! :+1:
Usei rake emails:fix_mailman_users para corrigir todas as postagens que foram atribuídas ao usuário errado em https://rubytalk.org/

2 curtidas

Este tópico foi fechado automaticamente 2 dias após a última resposta. Novas respostas não são mais permitidas.