Barry Warsaw pushed to branch master at mailman / Mailman
Commits: c972f9d5 by Aurélien Bompard at 2015-12-12T17:23:20Z Reject notifications contained no reason. Implement the suggestions from the review. Cleanups by Barry. - - - - - 3 changed files: - src/mailman/chains/reject.py - + src/mailman/chains/tests/test_reject.py - src/mailman/docs/NEWS.rst Changes: ===================================== src/mailman/chains/reject.py ===================================== --- a/src/mailman/chains/reject.py +++ b/src/mailman/chains/reject.py @@ -26,12 +26,15 @@ import logging from mailman.app.bounces import bounce_message from mailman.chains.base import TerminalChainBase +from mailman.core.errors import RejectMessage from mailman.core.i18n import _ from mailman.interfaces.chain import RejectEvent from zope.event import notify log = logging.getLogger('mailman.vette') + +NEWLINE = '\n' SEMISPACE = '; ' @@ -53,7 +56,21 @@ class RejectChain(TerminalChainBase): rule_misses = msgdata.get('rule_misses') if rule_misses: msg['X-Mailman-Rule-Misses'] = SEMISPACE.join(rule_misses) - # XXX Exception/reason - bounce_message(mlist, msg) + reasons = msgdata.get('moderation_reasons') + if reasons is None: + error = None + else: + error = RejectMessage(_(""" +Your message to the {list_name} mailing-list was rejected for the following +reasons: + +{reasons} + +The original message as received by Mailman is attached. +""").format( + list_name=mlist.display_name, + reasons=NEWLINE.join(reasons) + )) + bounce_message(mlist, msg, error) log.info('REJECT: %s', msg.get('message-id', 'n/a')) notify(RejectEvent(mlist, msg, msgdata, self)) ===================================== src/mailman/chains/tests/test_reject.py ===================================== --- /dev/null +++ b/src/mailman/chains/tests/test_reject.py @@ -0,0 +1,68 @@ +# Copyright (C) 2015 by the Free Software Foundation, Inc. +# +# This file is part of GNU Mailman. +# +# GNU Mailman is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# GNU Mailman is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# GNU Mailman. If not, see <http://www.gnu.org/licenses/>. + +"""Testing the reject chain.""" + +__all__ = [ + 'TestReject', + ] + + +import unittest + +from mailman.app.lifecycle import create_list +from mailman.core.chains import process as process_chain +from mailman.testing.helpers import ( + get_queue_messages, specialized_message_from_string as mfs) +from mailman.testing.layers import ConfigLayer + + + +class TestReject(unittest.TestCase): + """Test the `mailman.app.bounces.bounce_message()` function.""" + + layer = ConfigLayer + + def setUp(self): + self._mlist = create_list('t...@example.com') + self._msg = mfs("""\ +From: a...@example.com +To: t...@example.com +Subject: Ignore + +""") + + def test_reject_reasons(self): + # The bounce message must contain the moderation reasons. + msgdata = dict(moderation_reasons=[ + 'TEST-REASON-1', + 'TEST-REASON-2', + ]) + process_chain(self._mlist, self._msg, msgdata, start_chain='reject') + bounces = get_queue_messages('virgin') + self.assertEqual(len(bounces), 1) + payload = bounces[0].msg.get_payload(0).as_string() + self.assertIn('TEST-REASON-1', payload) + self.assertIn('TEST-REASON-2', payload) + + def test_no_reason(self): + # There may be no moderation reasons. + process_chain(self._mlist, self._msg, {}, start_chain='reject') + bounces = get_queue_messages('virgin') + self.assertEqual(len(bounces), 1) + payload = bounces[0].msg.get_payload(0).as_string() + self.assertIn('No bounce details are available', payload) ===================================== src/mailman/docs/NEWS.rst ===================================== --- a/src/mailman/docs/NEWS.rst +++ b/src/mailman/docs/NEWS.rst @@ -94,6 +94,7 @@ Message handling processed. This allows for better anti-spam defenses and rejecting non-member posts instead of always holding them for moderator review. Given by Aurélien Bompard. (Closes #163) + * Bounces can now contain rejection messages. Given by Aurélien Bompard. REST ---- View it on GitLab: https://gitlab.com/mailman/mailman/commit/c972f9d5504469890ba72e81cd662d18f1ee4c13
_______________________________________________ Mailman-checkins mailing list Mailman-checkins@python.org Unsubscribe: https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org