add workaround for unixfrom bug in Mailman

This commit is contained in:
Max Erenberg 2022-05-01 18:23:56 -04:00 committed by Mailing List Manager
parent 35b32dc925
commit ff48bd3780
2 changed files with 12 additions and 1 deletions

View File

@ -1,6 +1,6 @@
[metadata]
name = extra-mailman-archivers
version = 0.0.3
version = 0.0.4
author = Max Erenberg
author_email = merenber@csclub.uwaterloo.ca
description = Some extra archivers for Mailman 3

View File

@ -31,6 +31,7 @@ from io import BytesIO
import logging
import os
import tempfile
import time
from flufl.lock import Lock
from mailman.config import config
@ -90,6 +91,15 @@ class Pipermail:
:type mlist: mailman.interfaces.mailinglist.IMailingList
:type message: mailman.email.message.Message
"""
# Workaround for a bug in Mailman which sets unixfrom to an email
# address instead of an mbox header
# https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/runners/lmtp.py#L139
old_unixfrom = msg.get_unixfrom()
if old_unixfrom is not None and not old_unixfrom.startswith('From '):
# Adapted from https://github.com/python/cpython/blob/3.9/Lib/email/generator.py
msg.set_unixfrom('From ' + old_unixfrom + ' ' + time.ctime(time.time()))
# Mangle the 'From ' lines and add the Unix envelope header.
fp = BytesIO()
g = BytesGenerator(fp, mangle_from_=True)
@ -135,5 +145,6 @@ class Pipermail:
finally:
lock.unlock(unconditionally=True)
os.unlink(tempfile_name)
msg.set_unixfrom(old_unixfrom)
return None