diff options
Diffstat (limited to 'Mailman/Bouncers')
-rw-r--r-- | Mailman/Bouncers/DSN.py | 9 | ||||
-rw-r--r-- | Mailman/Bouncers/GroupWise.py | 4 | ||||
-rw-r--r-- | Mailman/Bouncers/SimpleMatch.py | 24 | ||||
-rw-r--r-- | Mailman/Bouncers/SimpleWarning.py | 6 |
4 files changed, 28 insertions, 15 deletions
diff --git a/Mailman/Bouncers/DSN.py b/Mailman/Bouncers/DSN.py index e4d2f486..2eacd0f4 100644 --- a/Mailman/Bouncers/DSN.py +++ b/Mailman/Bouncers/DSN.py @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2007 by the Free Software Foundation, Inc. +# Copyright (C) 1998-2008 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -89,6 +89,13 @@ def check(msg): def process(msg): + # We've seen some fairly bogus DSNs, allegedly from postfix that are + # multipart/mixed with 3 subparts - a text/plain postfix like part, a + # message/delivery-status part and a message/rfc822 part with the original + # message. Deal with it as follows. + if (msg.is_multipart() and len(msg.get_payload()) == 3 and + msg.get_payload()[1].get_content_type() == 'message/delivery-status'): + return check(msg.get_payload()[1]) # A DSN has been seen wrapped with a "legal disclaimer" by an outgoing MTA # in a multipart/mixed outer part. if msg.is_multipart() and msg.get_content_subtype() == 'mixed': diff --git a/Mailman/Bouncers/GroupWise.py b/Mailman/Bouncers/GroupWise.py index 7ef31256..74116135 100644 --- a/Mailman/Bouncers/GroupWise.py +++ b/Mailman/Bouncers/GroupWise.py @@ -1,4 +1,4 @@ -# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. +# Copyright (C) 1998-2008 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -46,6 +46,8 @@ def find_textplain(msg): def process(msg): if msg.get_type() <> 'multipart/mixed' or not msg['x-mailer']: return None + if msg['x-mailer'][:3].lower() not in ('nov', 'ntm', 'int'): + return None addrs = {} # find the first text/plain part in the message textplain = find_textplain(msg) diff --git a/Mailman/Bouncers/SimpleMatch.py b/Mailman/Bouncers/SimpleMatch.py index 2e9c23b1..bd7124b6 100644 --- a/Mailman/Bouncers/SimpleMatch.py +++ b/Mailman/Bouncers/SimpleMatch.py @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2007 by the Free Software Foundation, Inc. +# Copyright (C) 1998-2008 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -88,24 +88,24 @@ PATTERNS = [ _c('--- Original message follows\.'), _c('<(?P<addr>[^>]*)>:')), # googlemail.com - (_c('Delivery to the following recipient failed'), + (_c('Delivery to the following recipient(s)? failed'), _c('----- Original message -----'), _c('^\s*(?P<addr>[^\s@]+@[^\s@]+)\s*$')), - # kundenserver.de - (_c('A message that you sent could not be delivered'), + # kundenserver.de, mxlogic.net + (_c('A message that you( have)? sent could not be delivered'), _c('^---'), _c('<(?P<addr>[^>]*)>')), # another kundenserver.de - (_c('A message that you sent could not be delivered'), + (_c('A message that you( have)? sent could not be delivered'), _c('^---'), _c('^(?P<addr>[^\s@]+@[^\s@:]+):')), - # thehartford.com - (_c('Delivery to the following recipients failed'), + # thehartford.com and amenworld.com + (_c('Del(i|e)very to the following recipient(s)? (failed|was aborted)'), # this one may or may not have the original message, but there's nothing # unique to stop on, so stop on the first line of at least 3 characters # that doesn't start with 'D' (to not stop immediately) and has no '@'. _c('^[^D][^@]{2,}$'), - _c('^\s*(?P<addr>[^\s@]+@[^\s@]+)\s*$')), + _c('^\s*(. )?(?P<addr>[^\s@]+@[^\s@]+)\s*$')), # and another thehartfod.com/hartfordlife.com (_c('^Your message\s*$'), _c('^because:'), @@ -126,9 +126,9 @@ PATTERNS = [ (_c('^Invalid final delivery userid:'), _c('^Original message follows.'), _c('\s*(?P<addr>[^\s@]+@[^\s@]+)\s*$')), - # E500_SMTP_Mail_Service@lerctr.org - (_c('------ Failed Recipients ------'), - _c('-------- Returned Mail --------'), + # E500_SMTP_Mail_Service@lerctr.org and similar + (_c('---- Failed Recipients ----'), + _c(' Mail ----'), _c('<(?P<addr>[^>]*)>')), # cynergycom.net (_c('A message that you sent could not be delivered'), @@ -196,7 +196,7 @@ def process(msg, patterns=None): if mo: addr = mo.group('addr') if addr: - addrs[mo.group('addr')] = 1 + addrs[addr.strip('<>')] = 1 elif ecre.search(line): break if addrs: diff --git a/Mailman/Bouncers/SimpleWarning.py b/Mailman/Bouncers/SimpleWarning.py index 45012c16..34690625 100644 --- a/Mailman/Bouncers/SimpleWarning.py +++ b/Mailman/Bouncers/SimpleWarning.py @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2007 by the Free Software Foundation, Inc. +# Copyright (C) 2001-2008 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -49,6 +49,10 @@ patterns = [ (_c('Delivery attempts will continue to be made'), _c('.+'), _c('(?P<addr>.+)')), + # Googlemail + (_c('THIS IS A WARNING MESSAGE ONLY'), + _c('Message will be retried'), + _c(r'\s*(?P<addr>\S+@\S+)\s*')), # Next one goes here... ] |