Attachment 'MyHandler.py'

Download

   1 #!/usr/bin/env python
   2 #
   3 # Copyright (C) 2010 by the Free Software Foundation, Inc.
   4 #
   5 # This program is free software; you can redistribute it and/or
   6 # modify it under the terms of the GNU General Public License
   7 # as published by the Free Software Foundation; either version 2
   8 # of the License, or (at your option) any later version.
   9 #
  10 # This program is distributed in the hope that it will be useful,
  11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 # GNU General Public License for more details.
  14 #
  15 # You should have received a copy of the GNU General Public License
  16 # along with this program; if not, write to the Free Software
  17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  18 # USA.
  19 
  20 """This is a template for a custom handler that will examine the content
  21 of all the text/* parts in the message and take action based on matching
  22 various regexps.  It is not intended to be used as is, but rather as
  23 a starting point for implementing something useful.
  24 """
  25 
  26 import re
  27 
  28 from Mailman import Utils
  29 from Mailman import Errors
  30 from Mailman.i18n import _
  31 from Mailman.Handlers import Hold
  32 from Mailman.Handlers import Moderate
  33 
  34 class BadContent(Errors.HoldMessage):
  35     reason = _('Message contains improper content')
  36     rejection = _('Your message contained content not allowed on this list.')
  37 
  38 # The following regexps are things to search for in the text/* parts of
  39 # the message if more than one matches, the precedence is DISCARD over
  40 # REJECT over HOLD.
  41 DISCARD = re.compile(r'discard_pattern', re.IGNORECASE)
  42 REJECT = re.compile(r'reject_pattern', re.IGNORECASE)
  43 HOLD = re.compile(r'hold_pattern', re.IGNORECASE)
  44 # And if the following regexp matches the Subject: header, the message will
  45 # be unconditionally accepted.
  46 ACCEPT = re.compile(r'accept_pattern', re.IGNORECASE)
  47 
  48 # Note that this is just an example of how various things might be done.
  49 # It it not intended to be used as is.
  50 
  51 def process(mlist, msg, msgdata):
  52     # First see if the subject matches the accept pattern (simple test -
  53     # Doesn't work with encoded Subject)
  54     if ACCEPT.search(msg[subject]):
  55         msgdata['approved'] = 1
  56         # Used by the Emergency module
  57         msgdata['adminapproved'] = 1
  58         return
  59     discard = reject = hold = False
  60     # Go through the message and examine the text/* parts.
  61     for part in msg.walk():
  62         if part.get_content_maintype() == 'text':
  63             payload = part.get_payload(decode=True)
  64             if DISCARD.search(payload):
  65                 discard = True
  66             if REJECT.search(payload):
  67                 reject = True
  68             if HOLD.search(payload):
  69                 hold = True
  70     if discard:
  71         # This will honor the list's forward_auto_discards setting.
  72         Moderate.do_discard(mlist, msg)
  73         # Doesn't return.
  74     if reject:
  75         listowner = mlist.GetOwnerEmail()
  76         raise Errors.RejectMessage, Utils.wrap(_("""\
  77 Your message has been automatically rejected due to its content.
  78 If you think that your messages are being rejected in
  79 error, contact the mailing list owner at %(listowner)s."""))
  80     if hold:
  81         Hold.hold_for_approval(mlist, msg, msgdata, BadContent)

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.
  • [get | view] (2010-09-02 20:49:44, 3.3 KB) [[attachment:MyHandler.py]]
 All files | Selected Files: delete move to page copy to page

You are not allowed to attach a file to this page.