# Mailman 이메일 파싱 개선

**URL:** <https://meta.discourse.org/t/improving-mailman-email-parsing/253041>\
**Category:** Feature\
**Tags:** completed\
**Created:** [1월 26, 2023, 10:50오후 UTC](https://meta.discourse.org/t/improving-mailman-email-parsing/253041 "2023-01-26T22:50:14Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![supermathie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/supermathie/32/507518_2.png) [@supermathie](https://meta.discourse.org/u/supermathie)\
**Post date:** [1월 26, 2023, 10:50오후 UTC](https://meta.discourse.org/t/improving-mailman-email-parsing/253041/1 "2023-01-26T22:50:14Z")

</div>

Discourse를 사용하여 [공개 메일링 리스트를 미러링](https://meta.discourse.org/t/create-a-read-only-mailing-list-mirror/77990?u=supermathie)하는 몇몇 포럼에서 일부 게시글이 잘못된 사용자에게 귀속되는 문제를 발견했습니다:

> ![image](https://global.discourse-cdn.com/meta/original/4X/2/d/2/2d2cead937bd12475ef512f7982378e97637d2bb.png)  
> 출처: [[ruby-talk:444110] exif - photo metadata - ruby-talk - Ruby Mailing List Mirror](https://rubytalk.org/t/ruby-talk-444110-exif-photo-metadata/76147)

이 경우, Discourse는 리스트 제출 주소와 일치하는 이메일 주소와 "Austin Ziegler via ruby-talk"라는 이름으로 사용자를 임시 생성(staged)했으며, 이러한 유형의 모든 게시글에 해당 정보가 표시됩니다.

> ![image](https://global.discourse-cdn.com/meta/original/4X/9/2/c/92ce009d4b84a00df9deab82555211cca9fabeba.png)  
> 출처: [https://community.nanog.org/t/txt-att-net-outage/56955/4](https://community.nanog.org/t/txt-att-net-outage/56955/4)

이 경우, Discourse는 리스트 제출 주소와 일치하는 이메일 주소와 "Mailman"이라는 이름으로 사용자를 임시 생성했습니다.

조사 결과, 우리의 메일 파싱이 _가끔_ 정확하지 않은 것으로 나타났습니다. 그 이유는 [DMARC 준수](https://wiki.list.org/DEV/DMARC)를 위해 Mailman이 _가끔_ From 헤더를 자신으로 변경하고 원래 발신자를 reply-to에 넣기 때문입니다:

```plaintext
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>

```

```plaintext
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>

```

변경할 필요가 없는 경우에는 그대로 두기도 합니다:

```plaintext
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 태스크를 만들 수 있을까요?

---

_[View the full topic](https://meta.discourse.org/t/improving-mailman-email-parsing/253041)._
