diff options
Diffstat (limited to 'Mailman/pipeline/acknowledge.py')
| -rw-r--r-- | Mailman/pipeline/acknowledge.py | 83 |
1 files changed, 49 insertions, 34 deletions
diff --git a/Mailman/pipeline/acknowledge.py b/Mailman/pipeline/acknowledge.py index cf8e3d338..5bbbf52dc 100644 --- a/Mailman/pipeline/acknowledge.py +++ b/Mailman/pipeline/acknowledge.py @@ -15,51 +15,66 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. -"""Send an acknowledgement of the successful post to the sender. +"""Send an acknowledgment of the successful post to the sender. This only happens if the sender has set their AcknowledgePosts attribute. -This module must appear after the deliverer in the message pipeline in order -to send acks only after successful delivery. - """ +__metaclass__ = type +__all__ = ['Acknowledge'] + + +from zope.interface import implements + from Mailman import Errors from Mailman import Message from Mailman import Utils from Mailman.configuration import config from Mailman.i18n import _ +from Mailman.interfaces import IHandler __i18n_templates__ = True -def process(mlist, msg, msgdata): - # Extract the sender's address and find them in the user database - sender = msgdata.get('original_sender', msg.get_sender()) - member = mlist.members.get_member(sender) - if member is None: - return - ack = member.acknowledge_posts - if not ack: - return - # Okay, they want acknowledgement of their post. Give them their original - # subject. BAW: do we want to use the decoded header? - origsubj = msgdata.get('origsubj', msg.get('subject', _('(no subject)'))) - # Get the user's preferred language - lang = msgdata.get('lang', member.preferred_language) - # Now get the acknowledgement template - realname = mlist.real_name - text = Utils.maketext( - 'postack.txt', - {'subject' : Utils.oneline(origsubj, Utils.GetCharSet(lang)), - 'listname' : realname, - 'listinfo_url': mlist.script_url('listinfo'), - 'optionsurl' : member.options_url, - }, lang=lang, mlist=mlist, raw=True) - # Craft the outgoing message, with all headers and attributes - # necessary for general delivery. Then enqueue it to the outgoing - # queue. - subject = _('$realname post acknowledgment') - usermsg = Message.UserNotification(sender, mlist.bounces_address, - subject, text, lang) - usermsg.send(mlist) +class Acknowledge: + """Send an acknowledgment.""" + implements(IHandler) + + name = 'acknowledge' + description = _("""Send an acknowledgment of a posting.""") + + def process(self, mlist, msg, msgdata): + """See `IHandler`.""" + # Extract the sender's address and find them in the user database + sender = msgdata.get('original_sender', msg.get_sender()) + member = mlist.members.get_member(sender) + if member is None or not member.acknowledge_posts: + # Either the sender is not a member, in which case we can't know + # whether they want an acknowlegment or not, or they are a member + # who definitely does not want an acknowlegment. + return + # Okay, they are a member that wants an acknowledgment of their post. + # Give them their original subject. BAW: do we want to use the + # decoded header? + original_subject = msgdata.get( + 'origsubj', msg.get('subject', _('(no subject)'))) + # Get the user's preferred language. + lang = msgdata.get('lang', member.preferred_language) + # Now get the acknowledgement template. + realname = mlist.real_name + text = Utils.maketext( + 'postack.txt', + {'subject' : Utils.oneline(original_subject, + Utils.GetCharSet(lang)), + 'listname' : realname, + 'listinfo_url': mlist.script_url('listinfo'), + 'optionsurl' : member.options_url, + }, lang=lang, mlist=mlist, raw=True) + # Craft the outgoing message, with all headers and attributes + # necessary for general delivery. Then enqueue it to the outgoing + # queue. + subject = _('$realname post acknowledgment') + usermsg = Message.UserNotification(sender, mlist.bounces_address, + subject, text, lang) + usermsg.send(mlist) |
