Abhilash Raj pushed to branch master at GNU Mailman / Mailman Core


Commits:
dfcc7419 by Mark Sapiro at 2019-10-13T20:48:20Z
Fixed KeyError when fully personalizing a message without a To: header.

- - - - -
4f065aad by Abhilash Raj at 2019-10-13T20:48:21Z
Merge branch 'fix_639' into 'master'

Fixed KeyError when fully personalizing a message without a To: header.

Closes #639

See merge request mailman/mailman!567
- - - - -


3 changed files:

- src/mailman/docs/NEWS.rst
- src/mailman/mta/personalized.py
- src/mailman/mta/tests/test_delivery.py


Changes:

=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -17,6 +17,8 @@ Bugs
 ----
 * It is now possible to add the list posting address with nonmember role, e.g.
   to give it a moderaction of discard.  (Closes #633)
+* The issue of posting a message without a To: header to a fully personalized
+  list throwing a KeyError has been fixed.  (Closes #639)
 
 3.3.0 -- "Tom Sawyer"
 =====================


=====================================
src/mailman/mta/personalized.py
=====================================
@@ -49,13 +49,19 @@ class PersonalizedMixin:
         user_manager = getUtility(IUserManager)
         user = user_manager.get_user(recipient)
         if user is None:
-            msg.replace_header('To', recipient)
+            if msg.get('to'):
+                msg.replace_header('To', recipient)
+            else:
+                msg['To'] = recipient
         else:
             # Convert the unicode name to an email-safe representation.
             # Create a Header instance for the name so that it's properly
             # encoded for email transport.
             name = Header(user.display_name).encode()
-            msg.replace_header('To', formataddr((name, recipient)))
+            if msg.get('to'):
+                msg.replace_header('To', formataddr((name, recipient)))
+            else:
+                msg['To'] = formataddr((name, recipient))
 
 
 @public


=====================================
src/mailman/mta/tests/test_delivery.py
=====================================
@@ -136,6 +136,104 @@ delivered: a...@example.org
 language : English (USA)
 name     : Anne Person
 
+""")
+
+    def test_full_personalization(self):
+        self._mlist.personalize = Personalization.full
+        msgdata = dict(recipients=['a...@example.org'])
+        agent = DeliverTester()
+        refused = agent.deliver(self._mlist, self._msg, msgdata)
+        self.assertEqual(len(refused), 0)
+        self.assertEqual(len(_deliveries), 1)
+        _mlist, _msg, _msgdata, _recipients = _deliveries[0]
+        self.assertMultiLineEqual(_msg.as_string(), """\
+From: a...@example.org
+To: Anne Person <a...@example.org>
+Subject: test
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+
+address  : a...@example.org
+delivered: a...@example.org
+language : English (USA)
+name     : Anne Person
+
+""")
+
+    def test_full_personalization_no_to(self):
+        self._mlist.personalize = Personalization.full
+        del self._msg['to']
+        msgdata = dict(recipients=['a...@example.org'])
+        agent = DeliverTester()
+        refused = agent.deliver(self._mlist, self._msg, msgdata)
+        self.assertEqual(len(refused), 0)
+        self.assertEqual(len(_deliveries), 1)
+        _mlist, _msg, _msgdata, _recipients = _deliveries[0]
+        self.assertMultiLineEqual(_msg.as_string(), """\
+From: a...@example.org
+Subject: test
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+To: Anne Person <a...@example.org>
+
+
+address  : a...@example.org
+delivered: a...@example.org
+language : English (USA)
+name     : Anne Person
+
+""")
+
+    def test_full_personalization_no_user(self):
+        self._mlist.personalize = Personalization.full
+        msgdata = dict(recipients=['b...@example.org'])
+        agent = DeliverTester()
+        refused = agent.deliver(self._mlist, self._msg, msgdata)
+        self.assertEqual(len(refused), 0)
+        self.assertEqual(len(_deliveries), 1)
+        _mlist, _msg, _msgdata, _recipients = _deliveries[0]
+        self.assertMultiLineEqual(_msg.as_string(), """\
+From: a...@example.org
+To: b...@example.org
+Subject: test
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+
+
+address  : $user_address
+delivered: $user_delivered_to
+language : $user_language
+name     : $user_name
+
+""")
+
+    def test_full_personalization_no_user_no_to(self):
+        self._mlist.personalize = Personalization.full
+        del self._msg['to']
+        msgdata = dict(recipients=['b...@example.org'])
+        agent = DeliverTester()
+        refused = agent.deliver(self._mlist, self._msg, msgdata)
+        self.assertEqual(len(refused), 0)
+        self.assertEqual(len(_deliveries), 1)
+        _mlist, _msg, _msgdata, _recipients = _deliveries[0]
+        self.assertMultiLineEqual(_msg.as_string(), """\
+From: a...@example.org
+Subject: test
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+To: b...@example.org
+
+
+address  : $user_address
+delivered: $user_delivered_to
+language : $user_language
+name     : $user_name
+
 """)
 
 



View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/8c8386fbcbca02bca3150db7569242a2a050b4f8...4f065aad4efeda4096b3af776d65f3db58d81cb8

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/8c8386fbcbca02bca3150db7569242a2a050b4f8...4f065aad4efeda4096b3af776d65f3db58d81cb8
You're receiving this email because of your account on gitlab.com.


_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to