From 0f74db6fb0ae5a4fcdfaaf1976d196efc01ab0b0 Mon Sep 17 00:00:00 2001 From: Mark Sapiro Date: Fri, 31 Jul 2009 13:27:06 -0700 Subject: Added recognition for more bounces. --- Mailman/Bouncers/AOL.py | 45 +++++++++++++++++++++++++++++++++++++++++ Mailman/Bouncers/BouncerAPI.py | 3 ++- Mailman/Bouncers/SimpleMatch.py | 6 +++++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 Mailman/Bouncers/AOL.py (limited to 'Mailman/Bouncers') diff --git a/Mailman/Bouncers/AOL.py b/Mailman/Bouncers/AOL.py new file mode 100644 index 00000000..df8dd8c4 --- /dev/null +++ b/Mailman/Bouncers/AOL.py @@ -0,0 +1,45 @@ +# Copyright (C) 2009 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 +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. + +"""Recognizes a class of messages from AOL that report only Screen Name.""" + +import re +from email.Utils import parseaddr + +scre = re.compile('mail to the following recipients could not be delivered') + +def process(msg): + if msg.get_content_type() <> 'text/plain': + return + if not parseaddr(msg.get('from', ''))[1].lower().endswith('@aol.com'): + return + addrs = [] + found = False + for line in msg.get_payload(decode=True).splitlines(): + if scre.search(line): + found = True + continue + if found: + local = line.strip() + if local: + if re.search(r'\s', local): + break + if re.search('@', local): + addrs.append(local) + else: + addrs.append('%s@aol.com' % local) + return addrs diff --git a/Mailman/Bouncers/BouncerAPI.py b/Mailman/Bouncers/BouncerAPI.py index e19c53f7..5f83faf1 100644 --- a/Mailman/Bouncers/BouncerAPI.py +++ b/Mailman/Bouncers/BouncerAPI.py @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2006 by the Free Software Foundation, Inc. +# Copyright (C) 1998-2009 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 @@ -53,6 +53,7 @@ BOUNCE_PIPELINE = [ 'SimpleWarning', 'Yale', 'LLNL', + 'AOL', ] diff --git a/Mailman/Bouncers/SimpleMatch.py b/Mailman/Bouncers/SimpleMatch.py index a6a952a2..1c88d5ac 100644 --- a/Mailman/Bouncers/SimpleMatch.py +++ b/Mailman/Bouncers/SimpleMatch.py @@ -174,6 +174,10 @@ PATTERNS = [ (_c('Could not deliver message to'), _c('^\s*--'), _c('^Failed Recipient:\s*(?P[^\s@]+@[^\s@]+)\s*$')), + # uci.edu + (_c('--------Message not delivered'), + _c('--------Error Detail'), + _c('^\s*(?P[^\s@]+@[^\s@]+)\s*$')), # Next one goes here... ] @@ -195,7 +199,7 @@ def process(msg, patterns=None): # we process the message multiple times anyway. for scre, ecre, acre in patterns: state = 0 - for line in email.Iterators.body_line_iterator(msg): + for line in email.Iterators.body_line_iterator(msg, decode=True): if state == 0: if scre.search(line): state = 1 -- cgit v1.2.3