Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core
Commits:
4207d38d by Mark Sapiro at 2020-09-12T17:21:05-07:00
Generate a missing Message-ID: in LMTP runner.
- - - - -
2a3a6ac9 by Mark Sapiro at 2020-09-13T00:44:17+00:00
Merge branch 'msgid' into 'master'
Generate a missing Message-ID: in LMTP runner.
Closes #490 and #448
See merge request mailman/mailman!701
- - - - -
3 changed files:
- src/mailman/docs/NEWS.rst
- src/mailman/runners/lmtp.py
- src/mailman/runners/tests/test_lmtp.py
Changes:
=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -41,6 +41,8 @@ Bugs
* VERPed list welcome messages now have a correct envelope sender.
(Closes #757)
* Messages in digests now contain a ``Message: N`` header. (Closes #764)
+* The LMTP runner will now add a ``Message-ID:`` header if missing.
+ (Closes #448 and #490)
Command line
------------
=====================================
src/mailman/runners/lmtp.py
=====================================
@@ -91,7 +91,6 @@ ERR_451 = '451 Requested action aborted: error in processing'
ERR_501 = '501 Message has defects'
ERR_502 = '502 Error: command HELO not implemented'
ERR_550 = '550 Requested action not taken: mailbox unavailable'
-ERR_550_MID = '550 No Message-ID header provided'
def split_recipient(address):
@@ -145,7 +144,13 @@ class LMTPHandler:
# other missing information.
message_id = msg.get('message-id')
if message_id is None:
- return ERR_550_MID
+ # We have observed cases in the wild where bounce DSNs have no
+ # Message-ID; header. Also, there are brain dead phone clients
+ # that don't include a Message-ID: header. Thus, we cave and
+ # generate one. See https://gitlab.com/mailman/mailman/-/issues/448
+ # and https://gitlab.com/mailman/mailman/-/issues/490.
+ message_id = email.utils.make_msgid()
+ msg['Message-ID'] = message_id
if msg.defects:
return ERR_501
msg.original_size = len(envelope.content)
=====================================
src/mailman/runners/tests/test_lmtp.py
=====================================
@@ -43,21 +43,16 @@ class TestLMTP(unittest.TestCase):
self._lmtp.lhlo('remote.example.org')
self.addCleanup(self._lmtp.close)
- def test_message_id_required(self):
- # The message is rejected if it does not have a Message-ID header.
- with self.assertRaises(smtplib.SMTPDataError) as cm:
- self._lmtp.sendmail('[email protected]', ['[email protected]'], """\
+ def test_message_id_supplied_if_missing(self):
+ # A Message-ID header is generated if the message doesn't have one.
+ self._lmtp.sendmail('[email protected]', ['[email protected]'], """\
From: [email protected]
To: [email protected]
Subject: This has no Message-ID header
""")
- # LMTP returns a 550: Requested action not taken: mailbox unavailable
- # (e.g., mailmailman.runners.tests.test_lmtp.TestLMTPbox not found, no
- # access, or command rejected for policy reasons)
- self.assertEqual(cm.exception.smtp_code, 550)
- self.assertEqual(cm.exception.smtp_error,
- b'No Message-ID header provided')
+ items = get_queue_messages('in', expected_count=1)
+ self.assertIsNotNone(items[0].msg.get('message-id'))
def test_message_id_hash_is_added(self):
self._lmtp.sendmail('[email protected]', ['[email protected]'], """\
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/fb6c2b44de7cd73bdb31f170e85e1d07710a686b...2a3a6ac912f2844194d95f4627b5b09eff9d24f0
--
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/fb6c2b44de7cd73bdb31f170e85e1d07710a686b...2a3a6ac912f2844194d95f4627b5b09eff9d24f0
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]