From 7181a4d6638605595b043f66eb3cd01dd93a0ff2 Mon Sep 17 00:00:00 2001
From: Barry Warsaw
Date: Wed, 27 Apr 2011 20:11:10 -0400
Subject: Checkpointing for refactoring.
---
src/mailman/app/finder.py | 29 +-
src/mailman/bouncers/aol.py | 65 ++++
src/mailman/bouncers/caiwireless.py | 6 +-
src/mailman/bouncers/dsn.py | 6 +-
src/mailman/bouncers/exchange.py | 4 +-
src/mailman/bouncers/exim.py | 2 +-
src/mailman/bouncers/groupwise.py | 6 +-
src/mailman/bouncers/llnl.py | 4 +-
src/mailman/bouncers/microsoft.py | 8 +-
src/mailman/bouncers/netscape.py | 6 +-
src/mailman/bouncers/postfix.py | 4 +-
src/mailman/bouncers/qmail.py | 2 +-
src/mailman/bouncers/simplematch.py | 43 ++-
src/mailman/bouncers/simplewarning.py | 8 +-
src/mailman/bouncers/sina.py | 8 +-
src/mailman/bouncers/smtp32.py | 8 +-
src/mailman/bouncers/yahoo.py | 4 +-
src/mailman/bouncers/yale.py | 16 +-
src/mailman/bounces/__init__.py | 0
src/mailman/bounces/tests/__init__.py | 0
src/mailman/bounces/tests/data/__init__.py | 0
src/mailman/bounces/tests/data/aol_01.txt | 19 ++
src/mailman/bounces/tests/data/bounce_01.txt | 95 ++++++
src/mailman/bounces/tests/data/bounce_02.txt | 36 ++
src/mailman/bounces/tests/data/bounce_03.txt | 109 ++++++
src/mailman/bounces/tests/data/dsn_01.txt | 217 ++++++++++++
src/mailman/bounces/tests/data/dsn_02.txt | 187 +++++++++++
src/mailman/bounces/tests/data/dsn_03.txt | 144 ++++++++
src/mailman/bounces/tests/data/dsn_04.txt | 202 ++++++++++++
src/mailman/bounces/tests/data/dsn_05.txt | 125 +++++++
src/mailman/bounces/tests/data/dsn_06.txt | 122 +++++++
src/mailman/bounces/tests/data/dsn_07.txt | 121 +++++++
src/mailman/bounces/tests/data/dsn_08.txt | 131 ++++++++
src/mailman/bounces/tests/data/dsn_09.txt | 85 +++++
src/mailman/bounces/tests/data/dsn_10.txt | 66 ++++
src/mailman/bounces/tests/data/dsn_11.txt | 176 ++++++++++
src/mailman/bounces/tests/data/dsn_12.txt | 40 +++
src/mailman/bounces/tests/data/dsn_13.txt | 311 +++++++++++++++++
src/mailman/bounces/tests/data/dsn_14.txt | 149 +++++++++
src/mailman/bounces/tests/data/dsn_15.txt | 278 ++++++++++++++++
src/mailman/bounces/tests/data/dsn_16.txt | 213 ++++++++++++
src/mailman/bounces/tests/data/dsn_17.txt | 101 ++++++
src/mailman/bounces/tests/data/dumbass_01.txt | 109 ++++++
src/mailman/bounces/tests/data/exim_01.txt | 58 ++++
src/mailman/bounces/tests/data/groupwise_01.txt | 151 +++++++++
src/mailman/bounces/tests/data/groupwise_02.txt | 186 +++++++++++
src/mailman/bounces/tests/data/hotpop_01.txt | 180 ++++++++++
src/mailman/bounces/tests/data/llnl_01.txt | 203 ++++++++++++
src/mailman/bounces/tests/data/microsoft_01.txt | 108 ++++++
src/mailman/bounces/tests/data/microsoft_02.txt | 119 +++++++
src/mailman/bounces/tests/data/microsoft_03.txt | 65 ++++
src/mailman/bounces/tests/data/netscape_01.txt | 123 +++++++
src/mailman/bounces/tests/data/newmailru_01.txt | 112 +++++++
src/mailman/bounces/tests/data/postfix_01.txt | 123 +++++++
src/mailman/bounces/tests/data/postfix_02.txt | 60 ++++
src/mailman/bounces/tests/data/postfix_03.txt | 145 ++++++++
src/mailman/bounces/tests/data/postfix_04.txt | 240 ++++++++++++++
src/mailman/bounces/tests/data/postfix_05.txt | 231 +++++++++++++
src/mailman/bounces/tests/data/qmail_01.txt | 103 ++++++
src/mailman/bounces/tests/data/qmail_02.txt | 73 ++++
src/mailman/bounces/tests/data/qmail_03.txt | 245 ++++++++++++++
src/mailman/bounces/tests/data/qmail_04.txt | 81 +++++
src/mailman/bounces/tests/data/qmail_05.txt | 121 +++++++
src/mailman/bounces/tests/data/qmail_06.txt | 32 ++
src/mailman/bounces/tests/data/sendmail_01.txt | 146 ++++++++
src/mailman/bounces/tests/data/simple_01.txt | 153 +++++++++
src/mailman/bounces/tests/data/simple_02.txt | 118 +++++++
src/mailman/bounces/tests/data/simple_03.txt | 68 ++++
src/mailman/bounces/tests/data/simple_04.txt | 105 ++++++
src/mailman/bounces/tests/data/simple_05.txt | 81 +++++
src/mailman/bounces/tests/data/simple_06.txt | 77 +++++
src/mailman/bounces/tests/data/simple_07.txt | 21 ++
src/mailman/bounces/tests/data/simple_08.txt | 81 +++++
src/mailman/bounces/tests/data/simple_09.txt | 27 ++
src/mailman/bounces/tests/data/simple_10.txt | 45 +++
src/mailman/bounces/tests/data/simple_11.txt | 68 ++++
src/mailman/bounces/tests/data/simple_12.txt | 81 +++++
src/mailman/bounces/tests/data/simple_13.txt | 60 ++++
src/mailman/bounces/tests/data/simple_14.txt | 122 +++++++
src/mailman/bounces/tests/data/simple_15.txt | 259 +++++++++++++++
src/mailman/bounces/tests/data/simple_16.txt | 78 +++++
src/mailman/bounces/tests/data/simple_17.txt | 76 +++++
src/mailman/bounces/tests/data/simple_18.txt | 73 ++++
src/mailman/bounces/tests/data/simple_19.txt | 77 +++++
src/mailman/bounces/tests/data/simple_20.txt | 27 ++
src/mailman/bounces/tests/data/simple_21.txt | 46 +++
src/mailman/bounces/tests/data/simple_22.txt | 25 ++
src/mailman/bounces/tests/data/simple_23.txt | 152 +++++++++
src/mailman/bounces/tests/data/simple_24.txt | 33 ++
src/mailman/bounces/tests/data/simple_25.txt | 379 +++++++++++++++++++++
src/mailman/bounces/tests/data/simple_26.txt | 74 +++++
src/mailman/bounces/tests/data/simple_27.txt | 279 ++++++++++++++++
src/mailman/bounces/tests/data/simple_28.txt | 79 +++++
src/mailman/bounces/tests/data/simple_29.txt | 55 +++
src/mailman/bounces/tests/data/simple_30.txt | 72 ++++
src/mailman/bounces/tests/data/simple_31.txt | 106 ++++++
src/mailman/bounces/tests/data/simple_32.txt | 77 +++++
src/mailman/bounces/tests/data/simple_33.txt | 73 ++++
src/mailman/bounces/tests/data/simple_34.txt | 31 ++
src/mailman/bounces/tests/data/simple_35.txt | 88 +++++
src/mailman/bounces/tests/data/simple_36.txt | 61 ++++
src/mailman/bounces/tests/data/simple_37.txt | 36 ++
src/mailman/bounces/tests/data/sina_01.txt | 128 +++++++
src/mailman/bounces/tests/data/smtp32_01.txt | 97 ++++++
src/mailman/bounces/tests/data/smtp32_02.txt | 96 ++++++
src/mailman/bounces/tests/data/smtp32_03.txt | 92 ++++++
src/mailman/bounces/tests/data/smtp32_04.txt | 47 +++
src/mailman/bounces/tests/data/smtp32_05.txt | 63 ++++
src/mailman/bounces/tests/data/smtp32_06.txt | 41 +++
src/mailman/bounces/tests/data/smtp32_07.txt | 81 +++++
src/mailman/bounces/tests/data/yahoo_01.txt | 47 +++
src/mailman/bounces/tests/data/yahoo_02.txt | Bin 0 -> 2212 bytes
src/mailman/bounces/tests/data/yahoo_03.txt | 98 ++++++
src/mailman/bounces/tests/data/yahoo_04.txt | 150 +++++++++
src/mailman/bounces/tests/data/yahoo_05.txt | 150 +++++++++
src/mailman/bounces/tests/data/yahoo_06.txt | 105 ++++++
src/mailman/bounces/tests/data/yahoo_07.txt | 112 +++++++
src/mailman/bounces/tests/data/yahoo_08.txt | 129 ++++++++
src/mailman/bounces/tests/data/yahoo_09.txt | 165 +++++++++
src/mailman/bounces/tests/data/yahoo_10.txt | 83 +++++
src/mailman/bounces/tests/data/yale_01.txt | 422 ++++++++++++++++++++++++
src/mailman/bounces/tests/test_bounces.py | 283 ++++++++++++++++
src/mailman/interfaces/bounce.py | 27 +-
src/mailman/queue/bounce.py | 6 +-
src/mailman/tests/test_bounces.py | 24 +-
src/mailman/utilities/importer.py | 1 -
126 files changed, 11897 insertions(+), 83 deletions(-)
create mode 100644 src/mailman/bouncers/aol.py
create mode 100644 src/mailman/bounces/__init__.py
create mode 100644 src/mailman/bounces/tests/__init__.py
create mode 100644 src/mailman/bounces/tests/data/__init__.py
create mode 100644 src/mailman/bounces/tests/data/aol_01.txt
create mode 100644 src/mailman/bounces/tests/data/bounce_01.txt
create mode 100644 src/mailman/bounces/tests/data/bounce_02.txt
create mode 100644 src/mailman/bounces/tests/data/bounce_03.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_01.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_02.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_03.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_04.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_05.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_06.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_07.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_08.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_09.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_10.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_11.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_12.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_13.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_14.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_15.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_16.txt
create mode 100644 src/mailman/bounces/tests/data/dsn_17.txt
create mode 100644 src/mailman/bounces/tests/data/dumbass_01.txt
create mode 100644 src/mailman/bounces/tests/data/exim_01.txt
create mode 100644 src/mailman/bounces/tests/data/groupwise_01.txt
create mode 100644 src/mailman/bounces/tests/data/groupwise_02.txt
create mode 100644 src/mailman/bounces/tests/data/hotpop_01.txt
create mode 100644 src/mailman/bounces/tests/data/llnl_01.txt
create mode 100644 src/mailman/bounces/tests/data/microsoft_01.txt
create mode 100644 src/mailman/bounces/tests/data/microsoft_02.txt
create mode 100644 src/mailman/bounces/tests/data/microsoft_03.txt
create mode 100644 src/mailman/bounces/tests/data/netscape_01.txt
create mode 100644 src/mailman/bounces/tests/data/newmailru_01.txt
create mode 100644 src/mailman/bounces/tests/data/postfix_01.txt
create mode 100644 src/mailman/bounces/tests/data/postfix_02.txt
create mode 100644 src/mailman/bounces/tests/data/postfix_03.txt
create mode 100644 src/mailman/bounces/tests/data/postfix_04.txt
create mode 100644 src/mailman/bounces/tests/data/postfix_05.txt
create mode 100644 src/mailman/bounces/tests/data/qmail_01.txt
create mode 100644 src/mailman/bounces/tests/data/qmail_02.txt
create mode 100644 src/mailman/bounces/tests/data/qmail_03.txt
create mode 100644 src/mailman/bounces/tests/data/qmail_04.txt
create mode 100644 src/mailman/bounces/tests/data/qmail_05.txt
create mode 100644 src/mailman/bounces/tests/data/qmail_06.txt
create mode 100644 src/mailman/bounces/tests/data/sendmail_01.txt
create mode 100644 src/mailman/bounces/tests/data/simple_01.txt
create mode 100644 src/mailman/bounces/tests/data/simple_02.txt
create mode 100644 src/mailman/bounces/tests/data/simple_03.txt
create mode 100644 src/mailman/bounces/tests/data/simple_04.txt
create mode 100644 src/mailman/bounces/tests/data/simple_05.txt
create mode 100644 src/mailman/bounces/tests/data/simple_06.txt
create mode 100644 src/mailman/bounces/tests/data/simple_07.txt
create mode 100644 src/mailman/bounces/tests/data/simple_08.txt
create mode 100644 src/mailman/bounces/tests/data/simple_09.txt
create mode 100644 src/mailman/bounces/tests/data/simple_10.txt
create mode 100644 src/mailman/bounces/tests/data/simple_11.txt
create mode 100644 src/mailman/bounces/tests/data/simple_12.txt
create mode 100644 src/mailman/bounces/tests/data/simple_13.txt
create mode 100644 src/mailman/bounces/tests/data/simple_14.txt
create mode 100644 src/mailman/bounces/tests/data/simple_15.txt
create mode 100644 src/mailman/bounces/tests/data/simple_16.txt
create mode 100644 src/mailman/bounces/tests/data/simple_17.txt
create mode 100644 src/mailman/bounces/tests/data/simple_18.txt
create mode 100644 src/mailman/bounces/tests/data/simple_19.txt
create mode 100644 src/mailman/bounces/tests/data/simple_20.txt
create mode 100644 src/mailman/bounces/tests/data/simple_21.txt
create mode 100644 src/mailman/bounces/tests/data/simple_22.txt
create mode 100644 src/mailman/bounces/tests/data/simple_23.txt
create mode 100644 src/mailman/bounces/tests/data/simple_24.txt
create mode 100644 src/mailman/bounces/tests/data/simple_25.txt
create mode 100644 src/mailman/bounces/tests/data/simple_26.txt
create mode 100644 src/mailman/bounces/tests/data/simple_27.txt
create mode 100644 src/mailman/bounces/tests/data/simple_28.txt
create mode 100644 src/mailman/bounces/tests/data/simple_29.txt
create mode 100644 src/mailman/bounces/tests/data/simple_30.txt
create mode 100644 src/mailman/bounces/tests/data/simple_31.txt
create mode 100644 src/mailman/bounces/tests/data/simple_32.txt
create mode 100644 src/mailman/bounces/tests/data/simple_33.txt
create mode 100644 src/mailman/bounces/tests/data/simple_34.txt
create mode 100644 src/mailman/bounces/tests/data/simple_35.txt
create mode 100644 src/mailman/bounces/tests/data/simple_36.txt
create mode 100644 src/mailman/bounces/tests/data/simple_37.txt
create mode 100644 src/mailman/bounces/tests/data/sina_01.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_01.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_02.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_03.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_04.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_05.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_06.txt
create mode 100644 src/mailman/bounces/tests/data/smtp32_07.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_01.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_02.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_03.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_04.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_05.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_06.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_07.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_08.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_09.txt
create mode 100644 src/mailman/bounces/tests/data/yahoo_10.txt
create mode 100644 src/mailman/bounces/tests/data/yale_01.txt
create mode 100644 src/mailman/bounces/tests/test_bounces.py
(limited to 'src')
diff --git a/src/mailman/app/finder.py b/src/mailman/app/finder.py
index 41685730a..bd1305c21 100644
--- a/src/mailman/app/finder.py
+++ b/src/mailman/app/finder.py
@@ -22,6 +22,7 @@ from __future__ import absolute_import, unicode_literals
__metaclass__ = type
__all__ = [
'find_components',
+ 'scan_module',
]
@@ -32,6 +33,25 @@ from pkg_resources import resource_listdir
+def scan_module(module, interface):
+ """Return all the items in a module that conform to an interface.
+
+ :param module: A module object. The module's `__all__` will be scanned.
+ :type module: module
+ :param interface: The interface that returned objects must conform to.
+ :type interface: `Interface`
+ :return: The sequence of matching components.
+ :rtype: objects implementing `interface`
+ """
+ missing = object()
+ for name in module.__all__:
+ component = getattr(module, name, missing)
+ assert component is not missing, (
+ '%s has bad __all__: %s' % (module, name))
+ if interface.implementedBy(component):
+ yield component
+
+
def find_components(package, interface):
"""Find components which conform to a given interface.
@@ -54,10 +74,5 @@ def find_components(package, interface):
module = sys.modules[module_name]
if not hasattr(module, '__all__'):
continue
- for name in module.__all__:
- missing = object()
- component = getattr(module, name, missing)
- assert component is not missing, (
- '%s has bad __all__: %s' % (module, name))
- if interface.implementedBy(component):
- yield component
+ for component in scan_module(module, interface):
+ yield component
diff --git a/src/mailman/bouncers/aol.py b/src/mailman/bouncers/aol.py
new file mode 100644
index 000000000..e49c78a3f
--- /dev/null
+++ b/src/mailman/bouncers/aol.py
@@ -0,0 +1,65 @@
+# Copyright (C) 2009-2011 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 .
+
+"""Recognizes a class of messages from AOL that report only Screen Name."""
+
+from __future__ import absolute_import, unicode_literals
+
+__metaclass__ = type
+__all__ = [
+ 'AOL',
+ ]
+
+
+import re
+
+from email.Utils import parseaddr
+from zope.interface import implements
+
+from mailman.interfaces.bounce import IBounceDetector
+
+
+scre = re.compile('mail to the following recipients could not be delivered')
+
+
+
+class AOL:
+ """Recognizes a class of messages from AOL that report only Screen Name."""
+
+ implements(IBounceDetector)
+
+ def process(self, msg):
+ if msg.get_content_type() != 'text/plain':
+ return set()
+ if not parseaddr(msg.get('from', ''))[1].lower().endswith('@aol.com'):
+ return set()
+ addresses = set()
+ 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):
+ addresses.add(local)
+ else:
+ addresses.add('{0}@aol.com'.format(local))
+ return addresses
diff --git a/src/mailman/bouncers/caiwireless.py b/src/mailman/bouncers/caiwireless.py
index 26f46f331..57a56bdc2 100644
--- a/src/mailman/bouncers/caiwireless.py
+++ b/src/mailman/bouncers/caiwireless.py
@@ -52,7 +52,7 @@ class Caiwireless:
def process(self, msg):
if msg.get_content_type() != 'multipart/mixed':
- return None
+ return set()
state = ParseState.start
# This format thinks it's a MIME, but it really isn't.
for line in body_line_iterator(msg):
@@ -62,5 +62,5 @@ class Caiwireless:
elif state is ParseState.tag_seen and line:
mo = acre.match(line)
if not mo:
- return None
- return [mo.group('addr')]
+ return set()
+ return set(mo.group('addr'))
diff --git a/src/mailman/bouncers/dsn.py b/src/mailman/bouncers/dsn.py
index d3167e034..7b3021939 100644
--- a/src/mailman/bouncers/dsn.py
+++ b/src/mailman/bouncers/dsn.py
@@ -33,7 +33,7 @@ from email.iterators import typed_subpart_iterator
from email.utils import parseaddr
from zope.interface import implements
-from mailman.interfaces.bounce import IBounceDetector, NonFatal
+from mailman.interfaces.bounce import BounceStatus, IBounceDetector
@@ -57,7 +57,7 @@ def check(msg):
action = msgblock.get('action', '').lower()
# Some MTAs have been observed that put comments on the action.
if action.startswith('delayed'):
- return NonFatal
+ return BounceStatus.non_fatal
if not action.startswith('fail'):
# Some non-permanent failure, so ignore this block.
continue
@@ -104,5 +104,5 @@ class DSN:
# that some DSN generating MTAs don't include this on the
# Content-Type: header, so let's relax the test a bit.
if not msg.is_multipart() or msg.get_content_subtype() <> 'report':
- return None
+ return set()
return check(msg)
diff --git a/src/mailman/bouncers/exchange.py b/src/mailman/bouncers/exchange.py
index 380165c94..5fff89282 100644
--- a/src/mailman/bouncers/exchange.py
+++ b/src/mailman/bouncers/exchange.py
@@ -54,7 +54,7 @@ class Exchange:
if scre.search(line):
break
else:
- return []
+ return set()
# Search each line until we hit the end line.
for line in it:
if ecre.search(line):
@@ -64,4 +64,4 @@ class Exchange:
mo = a2cre.search(line)
if mo:
addresses.add(mo.group('addr'))
- return list(addresses)
+ return set(addresses)
diff --git a/src/mailman/bouncers/exim.py b/src/mailman/bouncers/exim.py
index 7241eae3c..7428d17f7 100644
--- a/src/mailman/bouncers/exim.py
+++ b/src/mailman/bouncers/exim.py
@@ -45,4 +45,4 @@ class Exim:
def process(self, msg):
"""See `IBounceDetector`."""
all = msg.get_all('x-failed-recipients', [])
- return [address for name, address in getaddresses(all)]
+ return set(address for name, address in getaddresses(all))
diff --git a/src/mailman/bouncers/groupwise.py b/src/mailman/bouncers/groupwise.py
index dea2d8b92..b6bbf1582 100644
--- a/src/mailman/bouncers/groupwise.py
+++ b/src/mailman/bouncers/groupwise.py
@@ -65,12 +65,12 @@ class GroupWise:
def process(self, msg):
"""See `IBounceDetector`."""
if msg.get_content_type() != 'multipart/mixed' or not msg['x-mailer']:
- return None
+ return set()
addresses = set()
# Find the first text/plain part in the message.
text_plain = find_textplain(msg)
if text_plain is None:
- return None
+ return set()
body = StringIO(text_plain.get_payload())
for line in body:
mo = acre.search(line)
@@ -84,4 +84,4 @@ class GroupWise:
addresses.add(line)
else:
addresses.add(line[:i])
- return list(addresses)
+ return set(addresses)
diff --git a/src/mailman/bouncers/llnl.py b/src/mailman/bouncers/llnl.py
index c4efc40ea..1d54faf10 100644
--- a/src/mailman/bouncers/llnl.py
+++ b/src/mailman/bouncers/llnl.py
@@ -48,5 +48,5 @@ class LLNL:
for line in body_line_iterator(msg):
mo = acre.search(line)
if mo:
- return [mo.group('addr')]
- return []
+ return set(mo.group('addr'))
+ return set()
diff --git a/src/mailman/bouncers/microsoft.py b/src/mailman/bouncers/microsoft.py
index 70c951933..f167c6098 100644
--- a/src/mailman/bouncers/microsoft.py
+++ b/src/mailman/bouncers/microsoft.py
@@ -50,17 +50,17 @@ class Microsoft:
def process(self, msg):
if msg.get_content_type() != 'multipart/mixed':
- return None
+ return set()
# Find the first subpart, which has no MIME type.
try:
subpart = msg.get_payload(0)
except IndexError:
# The message *looked* like a multipart but wasn't.
- return None
+ return set()
data = subpart.get_payload()
if isinstance(data, list):
# The message is a multi-multipart, so not a matching bounce.
- return None
+ return set()
body = StringIO(data)
state = ParseState.start
addresses = set()
@@ -71,4 +71,4 @@ class Microsoft:
elif state is ParseState.tag_seen:
if '@' in line:
addresses.add(line.strip())
- return list(addresses)
+ return set(addresses)
diff --git a/src/mailman/bouncers/netscape.py b/src/mailman/bouncers/netscape.py
index 77df3f224..0f09cdfa9 100644
--- a/src/mailman/bouncers/netscape.py
+++ b/src/mailman/bouncers/netscape.py
@@ -75,7 +75,7 @@ class Netscape:
# and some show
# multipart/mixed;
if not msg.is_multipart():
- return None
+ return set()
# We're looking for a text/plain subpart occuring before a
# message/delivery-status subpart.
plainmsg = None
@@ -86,7 +86,7 @@ class Netscape:
plainmsg = subpart
break
if not plainmsg:
- return None
+ return set()
# Total guesswork, based on captured examples...
body = StringIO(plainmsg.get_payload())
addresses = set()
@@ -100,4 +100,4 @@ class Netscape:
mo = acre.search(line)
if mo and not mo.group('reply'):
addresses.add(mo.group('addr'))
- return list(addresses)
+ return addresses
diff --git a/src/mailman/bouncers/postfix.py b/src/mailman/bouncers/postfix.py
index eb1c9c6cd..d491e2fc1 100644
--- a/src/mailman/bouncers/postfix.py
+++ b/src/mailman/bouncers/postfix.py
@@ -96,7 +96,7 @@ class Postfix:
def process(self, msg):
"""See `IBounceDetector`."""
if msg.get_content_type() not in REPORT_TYPES:
- return None
+ return set()
# We're looking for the plain/text subpart with a Content-Description:
# of 'notification'.
leaves = []
@@ -106,4 +106,4 @@ class Postfix:
content_desc = subpart.get('content-description', '').lower()
if content_type == 'text/plain' and content_desc == 'notification':
return set(findaddr(subpart))
- return None
+ return set()
diff --git a/src/mailman/bouncers/qmail.py b/src/mailman/bouncers/qmail.py
index d5f34fd65..94ea33181 100644
--- a/src/mailman/bouncers/qmail.py
+++ b/src/mailman/bouncers/qmail.py
@@ -93,4 +93,4 @@ class Qmail:
else:
# We're not looking at anything in particular.
pass
- return list(addresses)
+ return addresses
diff --git a/src/mailman/bouncers/simplematch.py b/src/mailman/bouncers/simplematch.py
index 972882cba..e3126ccc4 100644
--- a/src/mailman/bouncers/simplematch.py
+++ b/src/mailman/bouncers/simplematch.py
@@ -28,6 +28,7 @@ __all__ = [
import re
from email.iterators import body_line_iterator
+from email.quoprimime import unquote
from flufl.enum import Enum
from zope.interface import implements
@@ -39,6 +40,20 @@ class ParseState(Enum):
tag_seen = 1
+
+def _unquote_match(match):
+ return unquote(match.group(0))
+
+
+def _quopri_decode(address):
+ # Some addresses come back with quopri encoded spaces. This will decode
+ # them and strip the spaces. We can't use the undocumebted
+ # email.quoprimime.header_decode() because that also turns underscores
+ # into spaces, which is not good for us. Instead we'll use the
+ # undocumented email.quoprimime.unquote().
+ return re.sub('=[a-fA-F0-9]{2}', _unquote_match, address).strip()
+
+
def _c(pattern):
return re.compile(pattern, re.IGNORECASE)
@@ -118,13 +133,15 @@ PATTERNS = [
(_c('A message that you sent could not be delivered'),
_c('^---'),
_c('^(?P[^\s@]+@[^\s@:]+):')),
- # thehartford.com
- (_c('Delivery to the following recipients failed'),
+ # thehartford.com / songbird
+ (_c('Del(i|e)very to the following recipients (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 '@'.
+ # Also note that simple_30.txt contains an apparent misspelling in the
+ # MTA's DSN section.
_c('^[^D][^@]{2,}$'),
- _c('^\s*(?P[^\s@]+@[^\s@]+)\s*$')),
+ _c('^[\s*]*(?P[^\s@]+@[^\s@]+)\s*$')),
# and another thehartfod.com/hartfordlife.com
(_c('^Your message\s*$'),
_c('^because:'),
@@ -185,6 +202,22 @@ PATTERNS = [
(_c('- no such user here'),
_c('There is no user'),
_c('^(?P[^\s@]+@[^\s@]+)\s')),
+ # mxlogic.net
+ (_c('The following address failed:'),
+ _c('Included is a copy of the message header'),
+ _c('<(?P[^>]+)>')),
+ # fastdnsservers.com
+ (_c('The following recipient\(s\) could not be reached'),
+ _c('\s*Error Type'),
+ _c('^(?P[^\s@]+@[^\s@<>]+)')),
+ # xxx.com (simple_36.txt)
+ (_c('Could not deliver message to the following recipient'),
+ _c('\s*-- The header'),
+ _c('Failed Recipient: (?P[^\s@]+@[^\s@<>]+)')),
+ # mta1.service.uci.edu
+ (_c('Message not delivered to the following addresses'),
+ _c('Error detail'),
+ _c('\s*(?P[^\s@]+@[^\s@)]+)')),
# Next one goes here...
]
@@ -218,9 +251,9 @@ class SimpleMatch:
if mo:
address = mo.group('addr')
if address:
- addresses.add(address)
+ addresses.add(_quopri_decode(address))
elif ecre.search(line):
break
if len(addresses) > 0:
break
- return list(addresses)
+ return addresses
diff --git a/src/mailman/bouncers/simplewarning.py b/src/mailman/bouncers/simplewarning.py
index 0898e2b61..79173cb21 100644
--- a/src/mailman/bouncers/simplewarning.py
+++ b/src/mailman/bouncers/simplewarning.py
@@ -17,8 +17,6 @@
"""Recognizes simple heuristically delimited warnings."""
-from __future__ import absolute_import, unicode_literals
-
__metaclass__ = type
__all__ = [
'SimpleWarning',
@@ -27,7 +25,7 @@ __all__ = [
from mailman.bouncers.simplematch import _c
from mailman.bouncers.simplematch import SimpleMatch
-from mailman.interfaces.bounce import NonFatal
+from mailman.interfaces.bounce import BounceStatus
@@ -71,6 +69,6 @@ class SimpleWarning(SimpleMatch):
"""See `SimpleMatch`."""
if super(SimpleWarning, self).process(msg):
# It's a recognized warning so stop now.
- return NonFatal
+ return BounceStatus.non_fatal
else:
- return None
+ return set()
diff --git a/src/mailman/bouncers/sina.py b/src/mailman/bouncers/sina.py
index d003063c7..85284e258 100644
--- a/src/mailman/bouncers/sina.py
+++ b/src/mailman/bouncers/sina.py
@@ -45,9 +45,9 @@ class Sina:
def process(self, msg):
"""See `IBounceDetector`."""
if msg.get('from', '').lower() != 'mailer-daemon@sina.com':
- return []
+ return set()
if not msg.is_multipart():
- return []
+ return set()
# The interesting bits are in the first text/plain multipart.
part = None
try:
@@ -55,10 +55,10 @@ class Sina:
except IndexError:
pass
if not part:
- return []
+ return set()
addresses = set()
for line in body_line_iterator(part):
mo = acre.match(line)
if mo:
addresses.add(mo.group('addr'))
- return list(addresses)
+ return addresses
diff --git a/src/mailman/bouncers/smtp32.py b/src/mailman/bouncers/smtp32.py
index 85bd50e78..711323923 100644
--- a/src/mailman/bouncers/smtp32.py
+++ b/src/mailman/bouncers/smtp32.py
@@ -70,12 +70,12 @@ class SMTP32:
def process(self, msg):
mailer = msg.get('x-mailer', '')
if not mailer.startswith('
+X-MS-Has-Attach:
+X-MS-TNEF-Correlator:
+From: "Mail Delivery Subsystem"
+To:
+
+
+Your mail to the following recipients could not be delivered because =
+they are not accepting mail from xxx@lists.xxx.com:
+ screenname
+
diff --git a/src/mailman/bounces/tests/data/bounce_01.txt b/src/mailman/bounces/tests/data/bounce_01.txt
new file mode 100644
index 000000000..ab7f45d47
--- /dev/null
+++ b/src/mailman/bounces/tests/data/bounce_01.txt
@@ -0,0 +1,95 @@
+From VM Wed Feb 7 14:01:33 2001
+X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]
+ [nil "" "6" "February" "2001" "14:41:27" "GMT" "\"Jetmail System\" <>" "\"Jetmail System\" <>" nil "48" "Mail Error" "^From:" nil nil "2" nil nil nil nil nil]
+ nil)
+Return-Path:
+Delivered-To: bwarsaw@wooz.org
+Received: from digicool.com (host15.digitalcreations.d.subnet.rcn.com [208.59.6.15])
+ by mail.wooz.org (Postfix) with ESMTP id 1AE74D37AC
+ for ; Tue, 6 Feb 2001 01:41:50 -0500 (EST)
+Received: from
+ by digicool.com (CommuniGate Pro RULES 3.3.2)
+ with RULES id 1443386; Tue, 06 Feb 2001 01:43:53 -0500
+Received: from ns2.digicool.com ([216.164.72.2] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.3.2)
+ with ESMTP id 1443385 for barry@mail.digicool.com; Tue, 06 Feb 2001 01:43:53 -0500
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by ns2.digicool.com (8.9.3/8.9.3) with ESMTP id BAA24701
+ for ; Tue, 6 Feb 2001 01:42:30 -0500
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14Q1pg-0006hx-00
+ for barry@digicool.com; Tue, 06 Feb 2001 01:42:32 -0500
+Received: from host2.btamail.net.cn ([202.106.196.72] helo=btamail.net.cn)
+ by mail.python.org with smtp (Exim 3.21 #1)
+ id 14Q1oj-0006ek-00
+ for python-list-admin@python.org; Tue, 06 Feb 2001 01:41:33 -0500
+Message-Id:
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+From: "Jetmail System" <>
+Sender: python-list-owner@python.org
+To: python-list-admin@python.org
+Subject: Mail Error
+Date: 06 Feb 2001 14:41:27 GMT
+X-Autogenerated: Mirror
+X-Mirrored-by:
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.1 (101270)
+
+Your mail cannot be delivered to the following address(es):
+
+ dylan "(0), ErrMsg=mail box space not enough, account=dylan "
+
+Please check the above address(es) and then try again.
+
+---- Header of the source mail attached ----
+
+Received: from bjmx2.163.net([202.108.255.253]) by btamail.net.cn(JetMail 2.5.3.0)
+ with SMTP id jmb3a800bb6; Tue, 6 Feb 2001 06:41:26 -0000
+Received: by bjmx2.163.net (Postfix)
+ id ; Tue, 6 Feb 2001 06:31:28 +0800 (CST)
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by bjmx2.163.net (Postfix) with ESMTP id A468F1CB4210C
+ for ; Tue, 6 Feb 2001 06:31:27 +0800 (CST)
+Received: from mail.python.org (localhost.localdomain [127.0.0.1])
+ by mail.python.org (Postfix) with ESMTP
+ id 1B087E827; Mon, 5 Feb 2001 17:31:27 -0500 (EST)
+Delivered-To: mm+python-list@python.org
+Received: from onca.catsden.net (unknown [216.218.194.20])
+ by mail.python.org (Postfix) with ESMTP id F004BE72E
+ for ; Mon, 5 Feb 2001 17:30:44 -0500 (EST)
+Received: from localhost (chris@localhost)
+ by onca.catsden.net (8.9.3/8.9.3) with ESMTP id OAA28446;
+ Mon, 5 Feb 2001 14:23:15 -0800
+From:
+To: Sam Wun
+Cc:
+Subject: Re: sorting on IP addresses
+In-Reply-To: <3A7F26CB.BE85C96F@esec.com.au>
+Message-ID:
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+Sender: python-list-admin@python.org
+Errors-To: python-list-admin@python.org
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.1 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+Date: Mon, 5 Feb 2001 14:23:15 -0800 (PST)
+
+
diff --git a/src/mailman/bounces/tests/data/bounce_02.txt b/src/mailman/bounces/tests/data/bounce_02.txt
new file mode 100644
index 000000000..0f7d7f32d
--- /dev/null
+++ b/src/mailman/bounces/tests/data/bounce_02.txt
@@ -0,0 +1,36 @@
+From: E500_SMTP_Mail_Service@lerctr.org
+To:
+Subject: Returned Mail - Error During Delivery
+Date: Wed, 20 Nov 2002 19:58:47 -0500 (EST)
+X-Virus-Scanned: by amavisd-milter (http://amavis.org/)
+
+------ Failed Recipients ------
+
+: Requested action not taken: mailbox unavailable. [SMTP Error Code 550]
+-------- Returned Mail --------
+
+Received: from tnmx01.mgw.rr.com(24.165.200.11) by tnav01.midsouth.rr.com via csmap
+ id 26013; Wed, 20 Nov 2002 19:58:47 -0500 (EST)
+Received: from lerami.lerctr.org (lerami.lerctr.org [207.158.72.11])
+ by tnmx01.mgw.rr.com (8.12.5/8.12.5) with ESMTP id gAL0wLBM020447
+ for ; Wed, 20 Nov 2002 19:58:21 -0500 (EST)
+Received: from lerami.lerctr.org (localhost [127.0.0.1])
+ by lerami.lerctr.org (8.12.6/8.12.6/20020902/$Revision: 5940 $) with ESMTP id gAL0wHwV016400
+ for ; Wed, 20 Nov 2002 18:58:18 -0600 (CST)
+MIME-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+Subject: You have been unsubscribed from the MacArthur1975 mailing list
+From: macarthur1975-bounces@lerctr.org
+To: acinsp1@midsouth.rr.com
+Message-ID:
+Date: Wed, 20 Nov 2002 18:58:16 -0600
+Precedence: bulk
+X-BeenThere: macarthur1975@lerctr.org
+X-Mailman-Version: 2.1b4
+List-Id: MacArthur Class of 1975 Discussion
+X-List-Administrivia: yes
+Sender: macarthur1975-bounces@lerctr.org
+Errors-To: macarthur1975-bounces@lerctr.org
+X-Virus-Scanned: by amavisd-milter (http://amavis.org/)
+
diff --git a/src/mailman/bounces/tests/data/bounce_03.txt b/src/mailman/bounces/tests/data/bounce_03.txt
new file mode 100644
index 000000000..fc62dcab6
--- /dev/null
+++ b/src/mailman/bounces/tests/data/bounce_03.txt
@@ -0,0 +1,109 @@
+Received: from tele-punt-22.mail.demon.net ([194.217.242.7])
+ by mail.python.org with esmtp (Exim 4.05)
+ id 18GwM4-0000D4-00
+ for mailman-users-admin@python.org; Wed, 27 Nov 2002 02:11:28 -0500
+Received: from root by tele-punt-22.mail.demon.net with local (Exim 2.12 #1)
+ id 18GwLf-0003ka-00
+ for mailman-users-admin@python.org; Wed, 27 Nov 2002 07:11:03 +0000
+Subject: Mail delivery failure
+Message-Id:
+From: Mail Delivery System
+To: mailman-users-admin@python.org
+Date: Wed, 27 Nov 2002 07:11:03 +0000
+X-Spam-Status: No, hits=-2.5 required=5.0
+ tests=FROM_MAILER_DAEMON,MAILER_DAEMON,MAILTO_WITH_SUBJ,SPAM_PHRASE_03_05
+X-Spam-Level:
+
+This message was created automatically by mail delivery
+software. A message that you sent could not be delivered
+to all of its recipients.
+
+The following message, addressed to 'james@jeborall.demon.co.uk',
+failed because it has not been collected after 30 days
+
+Here is a copy of the first part of the message, including
+all headers.
+
+---- START OF RETURNED MESSAGE ----
+Received: from punt-2.mail.demon.net by mailstore for james@jeborall.demon.co.uk
+ id 1035738253:20:01723:229; Sun, 27 Oct 2002 17:04:13 GMT
+Received: from mail.python.org ([12.155.117.29]) by punt-2.mail.demon.net
+ id aa2004462; 27 Oct 2002 17:02 GMT
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 4.05)
+ id 185qn2-0007ru-00; Sun, 27 Oct 2002 12:01:28 -0500
+Date: Sun, 27 Oct 2002 12:00:04 -0500
+Message-ID: <20021027170004.27298.9909.Mailman@mail.python.org>
+From: mailman-users-request@python.org
+Subject: Mailman-Users digest, Vol 1 #2344 - 14 msgs
+Reply-to: mailman-users@python.org
+X-Mailer: Mailman v2.0.13 (101270)
+MIME-version: 1.0
+Content-type: multipart/mixed; boundary=10.0.11.1.506.27298.1035738004.364.17787
+To: mailman-users@python.org
+Sender: mailman-users-admin@python.org
+Errors-To: mailman-users-admin@python.org
+X-BeenThere: mailman-users@python.org
+X-Mailman-Version: 2.0.13 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: Mailman mailing list management users
+List-Unsubscribe: ,
+
+List-Archive:
+
+--10.0.11.1.506.27298.1035738004.364.17787
+Content-type: text/plain; charset=us-ascii
+Content-description: Masthead (Mailman-Users digest, Vol 1 #2344)
+
+Send Mailman-Users mailing list submissions to
+ mailman-users@python.org
+
+To subscribe or unsubscribe via the World Wide Web, visit
+ http://mail.python.org/mailman/listinfo/mailman-users
+or, via email, send a message with subject or body 'help' to
+ mailman-users-request@python.org
+
+You can reach the person managing the list at
+ mailman-users-admin@python.org
+
+When replying, please edit your Subject line so it is more specific
+than "Re: Contents of Mailman-Users digest..."
+
+
+--10.0.11.1.506.27298.1035738004.364.17787
+Content-type: text/plain; charset=us-ascii
+Content-description: Today's Topics (14 msgs)
+
+Today's Topics:
+
+ 1. RELEASED Mailman 2.1 beta 4 (Barry A. Warsaw)
+ 2. bin/arch not working (Aparajita Fishman)
+ 3. Can't receive mail (Aparajita Fishman)
+ 4. I have the same problem with the list not sending mail..but
+ getting confirmations... (jared sanders)
+ 5. Re: RELEASED Mailman 2.1 beta 4 (Jeremy Portzer)
+ 6. Re: I have the same problem with the list not sending mail..but getting confirmations... (Aparajita Fishman)
+ 7. 2.1b4 problem (Fuzzy)
+ 8. inetd doesn't start mailman...? (Nick Arnett)
+ 9. Re: rejecting non-subscriber postings (G. Armour Van Horn)
+ 10. Re: No public lists? (Armando Soto Baeza)
+ 11. Re: No public lists? (Armando Soto Baeza)
+ 12. Re: I have the same problem with the list not sending mail..but getting confirmations... (Armando Soto Baeza)
+ 13. Re: Can't subscribe via web (Armando Soto Baeza)
+
+--10.0.11.1.506.27298.1035738004.364.17787
+Content-type: multipart/digest; boundary="__--__--"
+
+--__--__--
+
+Message: 1
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+Message-ID: <15802.52753.139705.927733@gargle.gargle.HOWL>
+---- MESSAGE TRUNCATED ----
+
diff --git a/src/mailman/bounces/tests/data/dsn_01.txt b/src/mailman/bounces/tests/data/dsn_01.txt
new file mode 100644
index 000000000..d09768c6a
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_01.txt
@@ -0,0 +1,217 @@
+From VM Wed Oct 4 02:03:34 2000
+Return-Path:
+Delivered-To: zzzzz@mail.wooz.org
+Received: from ns1.beopen.com (unknown [208.185.174.104])
+ by mail.wooz.org (Postfix) with ESMTP id 0E701D37D5
+ for ; Tue, 3 Oct 2000 18:33:46 -0400 (EDT)
+Received: from dinsdale.python.org (dinsdale.cnri.reston.va.us [132.151.1.21])
+ by ns1.beopen.com (8.9.3/8.9.3) with ESMTP id PAA65588
+ for ; Tue, 3 Oct 2000 15:34:07 -0700 (PDT)
+ (envelope-from jpython-interest-admin@python.org)
+Received: from dinsdale.python.org (localhost [127.0.0.1])
+ by dinsdale.python.org (Postfix) with ESMTP id D2E691CC09
+ for ; Tue, 3 Oct 2000 18:32:02 -0400 (EDT)
+Delivered-To: jpython-interest-admin@python.org
+Received: from mta01f.seamail.go.com (mta01f.seamail.go.com [204.202.140.193])
+ by dinsdale.python.org (Postfix) with ESMTP id D33DA1CD8E
+ for ; Tue, 3 Oct 2000 18:31:09 -0400 (EDT)
+Received: from msg00.seamail.go.com (msg00.seamail.go.com [10.212.0.32])
+ by mta01.seamail.go.com
+ (Sun Internet Mail Server sims.4.0.2000.05.17.04.13.p6) with ESMTP id
+ <0G1V0040VJN3RY@mta01.seamail.go.com> for jpython-interest-admin@python.org;
+ Tue, 3 Oct 2000 14:57:04 -0700 (PDT)
+Received: from process-daemon by msg00.seamail.go.com
+ (Sun Internet Mail Server sims.4.0.2000.05.17.04.13.p6)
+ id <0G1V00701JN2C7@msg00.seamail.go.com> for
+ jpython-interest-admin@python.org; Tue, 03 Oct 2000 14:57:02 -0700 (PDT)
+Received: from msg00.seamail.go.com
+ (Sun Internet Mail Server sims.4.0.2000.05.17.04.13.p6)
+ id <0G1V00703JN1C6@msg00.seamail.go.com>; Tue, 03 Oct 2000 14:57:02 -0700 (PDT)
+Message-id: <0G1V0070AJN2C6@msg00.seamail.go.com>
+MIME-version: 1.0
+Content-type: MULTIPART/REPORT;
+ BOUNDARY="Boundary_(ID_+h6gzBCYzjhP3wCVCkWTrg)"; REPORT-TYPE=DELIVERY-STATUS
+Errors-To: jpython-interest-owner@python.org
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+List-Id: Python for the JavaTM Platform
+List-Unsubscribe: ,
+List-Archive:
+From: Internet Mail Delivery
+Sender: jpython-interest-owner@python.org
+To: jpython-interest-admin@python.org
+Subject: Delivery Notification: Delivery has failed
+Date: Tue, 03 Oct 2000 14:57:02 -0700 (PDT)
+X-BeenThere: jpython-interest@python.org
+X-Mailman-Version: 2.0beta6
+
+
+--Boundary_(ID_+h6gzBCYzjhP3wCVCkWTrg)
+Content-type: text/plain; charset=ISO-8859-1
+Content-transfer-encoding: 7BIT
+
+This report relates to a message you sent with the following header fields:
+
+ Message-id:
+ Date: Tue, 03 Oct 2000 19:28:29 +0000 (GMT)
+ From: heiho1@hotmail.com
+ To: thaank@nl.packardbell.org, jpython-interest@python.org
+ Subject: [JPython] Re: JPython testing framework
+
+Your message cannot be delivered to the following recipients:
+
+ Recipient address: JimmyMcEgypt@sims-ms-daemon
+ Original address: JimmyMcEgypt@go.com
+ Reason: recipient reached disk quota
+
+
+--Boundary_(ID_+h6gzBCYzjhP3wCVCkWTrg)
+Content-type: message/DELIVERY-STATUS
+
+Reporting-MTA: dns;msg00.seamail.go.com
+
+Action: failed
+Status: 5.0.0 (recipient reached disk quota)
+Original-recipient: rfc822;JimmyMcEgypt@go.com
+Final-recipient: rfc822;JimmyMcEgypt@sims-ms-daemon
+
+--Boundary_(ID_+h6gzBCYzjhP3wCVCkWTrg)
+Content-type: MESSAGE/RFC822
+
+Return-path: jpython-interest-admin@python.org
+Received: from sims-ms-daemon by msg00.seamail.go.com
+ (Sun Internet Mail Server sims.4.0.2000.05.17.04.13.p6)
+ id <0G1V00703JN1C6@msg00.seamail.go.com>; Tue, 03 Oct 2000 14:57:01 -0700 (PDT)
+Received: from mta01.seamail.go.com (mta01.seamail.go.com [10.212.0.193])
+ by msg00.seamail.go.com
+ (Sun Internet Mail Server sims.4.0.2000.05.17.04.13.p6) with ESMTP id
+ <0G1V00L69JG1BD@msg00.seamail.go.com> for JimmyMcEgypt@sims-ms-daemon
+ (ORCPT rfc822;JimmyMcEgypt@go.com); Tue, 03 Oct 2000 14:56:57 -0700 (PDT)
+Received: from dinsdale.python.org (dinsdale.cnri.reston.va.us [132.151.1.21])
+ by mta01.seamail.go.com
+ (Sun Internet Mail Server sims.4.0.2000.05.17.04.13.p6) with ESMTP id
+ <0G1V004NTCTFPX@mta01.seamail.go.com> for JimmyMcEgypt@msg00.seamail.go.com
+ (ORCPT rfc822;JimmyMcEgypt@go.com); Tue, 03 Oct 2000 12:29:39 -0700 (PDT)
+Received: from dinsdale.python.org (localhost [127.0.0.1])
+ by dinsdale.python.org (Postfix) with ESMTP id 76FC61CF28; Tue,
+ 03 Oct 2000 15:29:27 -0400 (EDT)
+Received: from hotmail.com (f121.pav1.hotmail.com [64.4.31.121])
+ by dinsdale.python.org (Postfix) with ESMTP id AFF4D1CD11 for
+ ; Tue, 03 Oct 2000 15:28:28 -0400 (EDT)
+Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue,
+ 03 Oct 2000 12:28:29 -0700
+Received: from 206.41.27.49 by pv1fd.pav1.hotmail.msn.com with HTTP; Tue,
+ 03 Oct 2000 19:28:29 +0000 (GMT)
+Date: Tue, 03 Oct 2000 19:28:29 +0000 (GMT)
+From: heiho1@hotmail.com
+Subject: [JPython] Re: JPython testing framework
+X-Originating-IP: [206.41.27.49]
+Sender: jpython-interest-admin@python.org
+To: thaank@nl.packardbell.org, jpython-interest@python.org
+Errors-to: jpython-interest-admin@python.org
+Message-id:
+MIME-version: 1.0
+Content-type: text/plain; format=flowed
+Content-transfer-encoding: 7BIT
+Precedence: bulk
+Delivered-to: jpython-interest@python.org
+X-BeenThere: jpython-interest@python.org
+X-Mailman-Version: 2.0beta6
+List-Post:
+List-Subscribe: ,
+
+List-Unsubscribe: ,
+
+List-Archive:
+List-Help:
+List-Id: Python for the JavaTM Platform
+
+X-OriginalArrivalTime: 03 Oct 2000 19:28:29.0320 (UTC)
+ FILETIME=[1BD98080:01C02D70]
+
+Otto,
+
+Thanks for the reply. I remembered hearing of this PyUnit but had lost
+track of it for a while. I just visited the sourceforge homepage:
+
+http://pyunit.sourceforge.net/pyunit.html
+
+I'm pretty sure that PyUnit [as its coded to Python 1.5.2] should be
+workable with JPython, but the web page says:
+
+"""
+PyUnit cannot be used with JPython, the users of which should probably use
+JUnit and create JPython subclasses of its TestCase class. I haven't tried
+doing this.
+"""
+
+Now, I don't see why this would be the case, so I'm going to download PyUnit
+and sniff around. Are any of these modifications you mentioned to get
+PyUnit running under JPython published on the Web anywhere? I'd like to
+take a look, as they would probably save me some time.
+
+Thanks again,
+
+James
+
+>
+>James,
+>
+>I'm using PyUnit from within JPython to drive unit tests that test a Java
+>applications. Some minor changes had to be made to PyUnit to make it work
+>with JPython, and the testrunner only works textually. But nevertheless,
+>it's a much better option than using JUnit from within JPython.
+>
+>-Otto Perdeck
+>
+>
+>Hello all,
+>
+>I've used JPython for close to two years and I find the language to be
+>indispensable. The recent, protracted silence regarding the "official"
+>status of JPython has concerned me quite a bit as I didn't want this
+>language to die out when it shows such promise.
+>
+>I hope that BeOpen and CNRI can come to an agreement that will benefit the
+>community as a whole.
+>
+>Regardless, my major use of JPython [due to the status of the 1.1 release
+>and its errata (not an attack on Finn Bock, just an engineer not willing to
+>deploy certain software on "unofficial" patches)] has been to facilitate
+>prototyping and [almost ;)] XP style repetitive testing. My interest is if
+>a JPython testing framework exists? Something that is a JUnit for JPython,
+>but with functional level testing as well [similar to what Inline-Standard
+>provides: http://www.inline-software.com/products/datasheet.html but not
+>restricted to EJBs].
+>
+>If not, what is the interest of the JPython mailing list on collaborating
+>to
+>produce such an entity [maybe sourceforge.net]?
+>
+>Also, has anybody played around with AspectJ [ www.aspectj.org very cool
+>stuff ;)] and JPython? It seems that AOP and JPython could be a pretty
+>good
+>one-two punch for knocking out larger scale Java problems.
+>
+>James Richards
+>Java Software Engineer
+>
+>
+>- Tjitske Haank & Otto Perdeck
+
+_________________________________________________________________________
+Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
+
+Share information about yourself, create your own public profile at
+http://profiles.msn.com.
+
+
+_______________________________________________
+JPython-Interest maillist - JPython-Interest@python.org
+http://www.python.org/mailman/listinfo/jpython-interest
+
+--Boundary_(ID_+h6gzBCYzjhP3wCVCkWTrg)--
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_02.txt b/src/mailman/bounces/tests/data/dsn_02.txt
new file mode 100644
index 000000000..3525605f8
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_02.txt
@@ -0,0 +1,187 @@
+From VM Tue Dec 26 18:03:42 2000
+Return-Path:
+Received: from ns2.digicool.com ([216.164.72.2] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.3.1)
+ with ESMTP id 399952 for xxxxx@mail.digicool.com; Tue, 26 Dec 2000 16:49:08 -0500
+Received: from mail.python.org (starship.python.net [63.102.49.30])
+ by ns2.digicool.com (8.9.3/8.9.3) with ESMTP id QAA00928
+ for ; Tue, 26 Dec 2000 16:49:01 -0500
+Received: from ns1.zope.org (localhost.localdomain [127.0.0.1])
+ by mail.python.org (Postfix) with ESMTP id 0CE1CE9B2
+ for ; Tue, 26 Dec 2000 16:48:01 -0500 (EST)
+Delivered-To: mm+python-list-admin@python.org
+Received: from cata.hud.ac.uk (cata.hud.ac.uk [161.112.232.16])
+ by mail.python.org (Postfix) with ESMTP id 5398EE9B2
+ for ; Tue, 26 Dec 2000 16:47:33 -0500 (EST)
+Received: from hud.ac.uk by cata.hud.ac.uk id <13167-0@cata.hud.ac.uk>;
+ Tue, 26 Dec 2000 21:47:28 +0000
+Message-Type: Delivery Report
+X400-Received: by /PRMD=UK.AC/ADMD= /C=GB/; Relayed;
+ Tue, 26 Dec 2000 21:47:27 +0000
+X400-Received: by mta cata.hud.ac.uk in /PRMD=UK.AC/ADMD= /C=GB/; Relayed;
+ Tue, 26 Dec 2000 21:47:27 +0000
+X400-MTS-Identifier: [/PRMD=UK.AC/ADMD= /C=GB/;cata.hud.a:131600:20001226214727]
+Message-ID: <"cata.hud.a:131600:20001226214727"@hud.ac.uk>
+Content-Identifier: RE: A Q conce...
+MIME-Version: 1.0
+Content-Type: multipart/report; boundary="---Multi-Part-Report-Level-1-1-13166"
+Errors-To: python-list-owner@python.org
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+From: postmaster@hud.ac.uk
+Sender: python-list-owner@python.org
+To: python-list-admin@python.org
+Subject: Delivery Report (failure) for zzzzz@zeus.hud.ac.uk
+Date: Tue, 26 Dec 2000 21:47:28 +0000
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0
+
+
+-----Multi-Part-Report-Level-1-1-13166
+
+This report relates to your message:
+Subject: RE: A Q concerning map (a comparison to Maple V),
+ Message-ID: ,
+ To:
+
+of Tue, 26 Dec 2000 21:47:27 +0000
+
+Your message was not delivered to:
+ zzzzz@zeus.hud.ac.uk
+for the following reason:
+Diagnostic was Unable to transfer, Message timed out
+Information Message timed out
+
+The Original Message follows:
+
+-----Multi-Part-Report-Level-1-1-13166
+Content-Type: message/delivery-status
+
+Reporting-MTA: x400; mta cata.hud.ac.uk in /PRMD=UK.AC/ADMD= /C=GB/
+Arrival-Date: Sat, 23 Dec 2000 21:44:56 +0000
+DSN-Gateway: dns; cata.hud.ac.uk
+X400-Conversion-Date: Tue, 26 Dec 2000 21:47:28 +0000
+Original-Envelope-Id: [/PRMD=UK.AC/ADMD= /C=GB/;,
+ To:
+
+Original-Recipient: rfc822; zzzzz@zeus.hud.ac.uk
+Final-Recipient: x400; /S=zzzzz/OU=zeus/O=hud/PRMD=UK.AC/ADMD= /C=GB/
+X400-Originally-Specified-Recipient-Number: 1
+Action: failed
+Diagnostic-Code: Reason 1 (Unable-To-Transfer); Diagnostic 5 (Maximum-Time-Expired)
+Status: 4.4.7
+X400-Supplementary-Info: "Message timed out"
+X400-Last-Trace: Sat, 23 Dec 2000 21:44:56 +0000
+
+-----Multi-Part-Report-Level-1-1-13166
+Content-Type: message/rfc822
+
+Received: from mail.python.org (actually host starship.python.net)
+ by cata.hud.ac.uk with SMTP (Mailer); Sat, 23 Dec 2000 21:44:56 +0000
+Received: from ns1.zope.org (localhost.localdomain [127.0.0.1])
+ by mail.python.org (Postfix) with ESMTP id 9200FEB18;
+ Sat, 23 Dec 2000 13:10:09 -0500 (EST)
+Delivered-To: mm+python-list@python.org
+Received: from mail.rdc1.md.home.com (ha1.rdc1.md.home.com [24.2.2.66])
+ by mail.python.org (Postfix) with ESMTP id 9FA2AEC45
+ for ; Sat, 23 Dec 2000 12:35:46 -0500 (EST)
+Received: from cj569191b ([65.1.136.53])
+ by mail.rdc1.md.home.com (InterMail vM.4.01.03.00 201-229-121)
+ with SMTP
+ id <20001223173546.KSYS10139.mail.rdc1.md.home.com@cj569191b>
+ for ; Sat, 23 Dec 2000 09:35:46 -0800
+From: Tim Peters
+To: python-list
+Subject: RE: A Q concerning map (a comparison to Maple V)
+Message-ID:
+MIME-Version: 1.0
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: 7bit
+X-Priority: 3 (Normal)
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0)
+X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200
+In-Reply-To: <3A448735.4DF3C95C@schneider-kamp.de>
+Importance: Normal
+Sender: python-list-admin@python.org
+Errors-To: python-list-admin@python.org
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+
+List-Unsubscribe: ,
+
+List-Archive:
+Date: Sat, 23 Dec 2000 12:35:50 -0500
+
+[Franz GEIGER]
+> > map(replace, ["abc", "cde"], "c", "C");
+> > instead of having to create a lambda function.
+> > Wouldn't it make sense to have that in Python too? Do there come
+> > more such opportunities into your mind?
+
+[Peter Schneider-Kamp]
+> If I get you right you intend this to mean:
+>
+> map(replace, ["abc", "cde"], ["c"]*2, ["C"]*2)
+>
+> So basically your proposal is to reuse map parameters
+> which are no sequences in every iteration over the
+> parameters who are,
+
+It's hard to tell for sure, but that was my guess too. In array languages,
+this kind of thing is ubiquitous and is often called "scalar broadcast"
+(where a scalar is any atomic value (as opposed to an array), and is
+"broadcast" to every position of the arrays in which it's combined via some
+operation).
+
+There was a long debate about this a few years ago on c.l.py, where I
+championed scalar broadcast in map specifically. It collapsed under its own
+hideous weight when-- as such things always do --that originally
+modest goal got hijacked by people seeking to extend the semantics to every
+corner of the language. That won't happen.
+
+> ...
+> But how would you decide if "abc" is a sequence parameter
+> or not?
+
+That is a problem! Kinda. Mostly people want to broadcast numbers (as in
+Franz's original example), and there's no problem there. A cheap workaround
+for sequences that are desired to be treated as scalars would have been to
+introduce a new builtin scalar() function, that simply hid the
+"sequenceness" of its argument from map.
+
+Note that the listcomps in 2.0 make scalar broadcast much easier to spell;
+e.g.
+
+ [replace(x, "c", "C") for x in ("abc", "cde")]
+ [x**2 + 5 for x in L]
+
+So the better solution is not to extend map, but to forget it <0.9 wink>.
+
+a-life-strategy-of-universal-applicability-ly y'rs - tim
+
+
+--
+http://www.python.org/mailman/listinfo/python-list
+
+-----Multi-Part-Report-Level-1-1-13166--
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_03.txt b/src/mailman/bounces/tests/data/dsn_03.txt
new file mode 100644
index 000000000..4e4fef058
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_03.txt
@@ -0,0 +1,144 @@
+From VM Fri Feb 9 13:30:37 2001
+Return-Path:
+Delivered-To: zzzzz@wwwww.org
+Received: from digicool.com (host15.digitalcreations.d.subnet.rcn.com [208.59.6.15])
+ by mail.wwwww.org (Postfix) with ESMTP id 1E50CD37AC
+ for ; Thu, 8 Feb 2001 07:31:12 -0500 (EST)
+Received: from
+ by digicool.com (CommuniGate Pro RULES 3.3.2)
+ with RULES id 1450363; Thu, 08 Feb 2001 07:33:30 -0500
+Received: from ns2.digicool.com ([216.164.72.2] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.3.2)
+ with ESMTP id 1450362 for yyyyy@mail.digicool.com; Thu, 08 Feb 2001 07:33:30 -0500
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by ns2.digicool.com (8.9.3/8.9.3) with ESMTP id HAA17520
+ for ; Thu, 8 Feb 2001 07:32:00 -0500
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14QqF1-0002hJ-00
+ for yyyyy@digicool.com; Thu, 08 Feb 2001 07:32:03 -0500
+Received: from [194.78.23.194] (helo=pigeon.advalvas.be)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14QqCJ-0002UN-00
+ for python-list-admin@python.org; Thu, 08 Feb 2001 07:29:15 -0500
+Message-Id: <12334670553230@pigeon.advalvas.be>
+Mime-Version: 1.0
+Content-Type: multipart/report; report-type=delivery-status; boundary="==_12334670553231@pigeon.advalvas.be==_"
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+From: "postmaster@advalvas.be"
+Sender: python-list-owner@python.org
+To: "python-list-admin@python.org"
+Subject: Failed mail: exceeded maximum incoming message size
+Date: Thu, 8 Feb 2001 13:33:46 +0100
+X-Autogenerated: Mirror
+X-Mirrored-by:
+X-Mailer: NTMail v5.06.0014
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.1 (101270)
+
+This is a MIME-encapsulated message
+
+--==_12334670553231@pigeon.advalvas.be==_
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Your message was not delivered to
+
+ ddd.kkk@advalvas.be
+
+This mail message has exceeded the maximum incoming message size.
+
+
+--==_12334670553231@pigeon.advalvas.be==_
+Content-Type: message/delivery-status
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Reporting-MTA: dns;pigeon.net7.be
+
+Final-Recipient: rfc822;ddd.kkk@advalvas.be
+Action: failure
+Status: 553 Exceeded maximum inbound message size
+
+
+--==_12334670553231@pigeon.advalvas.be==_
+Content-Type: message/rfc822
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14Qq5S-0001zk-00; Thu, 08 Feb 2001 07:22:10 -0500
+Received: from [193.123.0.194] (helo=intrepid.trisystems.co.uk)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14Qq2n-0001kA-00
+ for python-list@python.org; Thu, 08 Feb 2001 07:19:25 -0500
+Received: by intrepid with Internet Mail Service (5.5.2650.21)
+ id <11PN1RRB>; Thu, 8 Feb 2001 12:21:16 -0000
+Message-ID: <31575A892FF6D1118F5800600846864D5B17D1@intrepid>
+From: Simon Brunning
+To: 'Ggggg Wwwww' , Python Mailling list
+
+Subject: RE: None assigment
+MIME-Version: 1.0
+X-Mailer: Internet Mail Service (5.5.2650.21)
+Content-Type: text/plain
+Sender: python-list-admin@python.org
+Errors-To: python-list-admin@python.org
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.1 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+Date: Thu, 8 Feb 2001 12:20:27 -0000
+
+> From: Ggggg Wwwww [SMTP:ggg@pppeval.be]
+> While playing a bit with python 2.0, I found that I can assign some value
+> to None
+(snip)
+> If it is a feature (I suppose it is not a bug :), what is the interest of
+> this ?
+
+Feature. 'None' is just a label, and just like any other label, you can
+always assign to it. I'm not aware of any way of preventing a label from
+being assigned to.
+
+Doesn't make it a good idea, though...
+
+Cheers,
+TriSystems Ltd.
+sssss@trisystems.co.uk
+
+
+
+
+
+-----------------------------------------------------------------------
+The information in this email is confidential and may be legally privileged.
+It is intended solely for the addressee. Access to this email by anyone else
+is unauthorised. If you are not the intended recipient, any disclosure,
+copying, distribution, or any action taken or omitted to be taken in
+reliance on it, is prohibited and may be unlawful. TriSystems Ltd. cannot
+accept liability for statements made which are clearly the senders own.
+
+--
+http://mail.python.org/mailman/listinfo/python-list
+
+--==_12334670553231@pigeon.advalvas.be==_--
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_04.txt b/src/mailman/bounces/tests/data/dsn_04.txt
new file mode 100644
index 000000000..9bea97589
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_04.txt
@@ -0,0 +1,202 @@
+From VM Sat Jun 30 11:29:01 2001
+X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]
+ [nil "Saturday" "30" "June" "2001" "00:21:42" "+0200" "PMDF e-Mail Interconnect" "postmaster@yogi.urz.unibas.ch" nil "147" "Delivery Notification: Delivery has failed" "^From:" nil nil "6" nil nil nil nil nil]
+ nil)
+Return-Path:
+Delivered-To: barry@wooz.org
+Received: from digicool.com (unknown [63.100.190.15])
+ by mail.wooz.org (Postfix) with ESMTP id 2852FD36EC
+ for ; Fri, 29 Jun 2001 18:21:58 -0400 (EDT)
+Received: from
+ by digicool.com (CommuniGate Pro RULES 3.4)
+ with RULES id 2122693; Fri, 29 Jun 2001 18:23:52 -0400
+Received: from ns2.digicool.com ([63.100.190.2] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.4)
+ with ESMTP id 2122692 for barry@mail.digicool.com; Fri, 29 Jun 2001 18:23:52 -0400
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by ns2.digicool.com (8.9.3/8.9.3) with ESMTP id SAA15102
+ for ; Fri, 29 Jun 2001 18:22:00 -0400
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15G6eH-0006NJ-00
+ for barry@digicool.com; Fri, 29 Jun 2001 18:22:01 -0400
+Received: from [131.152.1.4] (helo=yogi.urz.unibas.ch)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15G6d4-0006Lg-00
+ for python-list-admin@python.org; Fri, 29 Jun 2001 18:20:46 -0400
+Received: from PROCESS-DAEMON by yogi.urz.unibas.ch (PMDF V5.2-29 #33343)
+ id <01K5CWRKUM2O8X1X1D@yogi.urz.unibas.ch> for python-list-admin@python.org;
+ Sat, 30 Jun 2001 00:21:44 +0200
+Received: from yogi.urz.unibas.ch (PMDF V5.2-29 #33343)
+ id <01K5CWRINUF48X46F4@yogi.urz.unibas.ch>; Sat, 30 Jun 2001 00:21:42 +0200
+Message-id: <01K5CWRJIDYU8X46F4@yogi.urz.unibas.ch>
+MIME-version: 1.0
+Content-type: MULTIPART/REPORT;
+ BOUNDARY="Boundary_(ID_MUSA353qRe9PeqtdeP14tg)"; REPORT-TYPE=DELIVERY-STATUS
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+From: PMDF e-Mail Interconnect
+Sender: python-list-owner@python.org
+To: python-list-admin@python.org
+Subject: Delivery Notification: Delivery has failed
+Date: Sat, 30 Jun 2001 00:21:42 +0200
+X-Autogenerated: Mirror
+X-Mirrored-by:
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.5 (101270)
+
+
+--Boundary_(ID_MUSA353qRe9PeqtdeP14tg)
+Content-type: text/plain; charset=us-ascii
+Content-language: EN-US
+
+This report relates to a message you sent with the following header fields:
+
+ Message-id:
+ Date: Sat, 30 Jun 2001 00:18:49 +0200 (CEST)
+ From: Carsten Geckeler
+ To: Python
+ Subject: Re: Augmented Assignement (was: Re: PEP scepticism)
+
+Your message cannot be delivered to the following recipients:
+
+ Recipient address: HAASM@yogi.urz.unibas.ch
+ Original address: max.haas@unibas.ch
+%MAIL-E-OPENOUT, error opening !AS as output
+-RMS-E-CRE, ACP file create failed
+-SYSTEM-F-EXDISKQUOTA, disk quota exceeded
+
+
+--Boundary_(ID_MUSA353qRe9PeqtdeP14tg)
+Content-type: message/DELIVERY-STATUS
+
+Original-envelope-id: 0GFP00202Q2DR3@mailhub.unibas.ch
+Reporting-MTA: dns;yogi.urz.unibas.ch
+
+Action: failed
+Status: 5.0.0
+Original-recipient: rfc822;max.haas@unibas.ch
+Final-recipient: rfc822;HAASM@yogi.urz.unibas.ch
+
+--Boundary_(ID_MUSA353qRe9PeqtdeP14tg)
+Content-type: MESSAGE/RFC822
+
+Return-path: python-list-admin@python.org
+Received: from yogi.urz.unibas.ch by yogi.urz.unibas.ch (PMDF V5.2-29 #33343)
+ id <01K5CWRINUF48X46F4@yogi.urz.unibas.ch>
+ (original mail from python-list-admin@python.org); Sat,
+ 30 Jun 2001 00:21:42 +0200
+Received: from maser.urz.unibas.ch ([131.152.1.5])
+ by yogi.urz.unibas.ch (PMDF V5.2-29 #33343)
+ with ESMTP id <01K5CWRGK0V68X4CRC@yogi.urz.unibas.ch> for
+ HAASM@yogi.urz.unibas.ch (ORCPT rfc822;max.haas@unibas.ch); Sat,
+ 30 Jun 2001 00:21:38 +0200
+Received: from DIRECTORY-DAEMON.mailhub.unibas.ch by mailhub.unibas.ch
+ (PMDF V6.0-24 #41480) id <0GFP00201Q2DR3@mailhub.unibas.ch> for
+ HAASM@yogi.urz.unibas.ch (ORCPT max.haas@unibas.ch); Sat,
+ 30 Jun 2001 00:20:37 +0200 (MET DST)
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by mailhub.unibas.ch (PMDF V6.0-24 #41480)
+ with ESMTP id <0GFP00BEAQ2C5Y@mailhub.unibas.ch> for max.haas@unibas.ch; Sat,
+ 30 Jun 2001 00:20:37 +0200 (MET DST)
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1) id 15G6bK-0006HW-00; Fri,
+ 29 Jun 2001 18:18:58 -0400
+Received: from [134.2.34.92] (helo=nemesis.jura.uni-tuebingen.de ident=qmailr)
+ by mail.python.org with smtp (Exim 3.21 #1)
+ id 15G6Zp-0006Ee-00 for python-list@python.org; Fri, 29 Jun 2001 18:17:25 -0400
+Received: (qmail 31643 invoked from network); Fri, 29 Jun 2001 22:17:24 +0000
+Received: from justitia.jura.uni-tuebingen.de (mail@134.2.34.12)
+ by nemesis.jura.uni-tuebingen.de with SMTP; Fri, 29 Jun 2001 22:17:24 +0000
+Received: from s-gec3 by justitia.jura.uni-tuebingen.de with local
+ (Exim 3.12 #1 (Debian)) id 15G6Zo-0002Zx-00 for ; Sat,
+ 30 Jun 2001 00:17:24 +0200
+Date: Sat, 30 Jun 2001 00:18:49 +0200 (CEST)
+From: Carsten Geckeler
+Subject: Re: Augmented Assignement (was: Re: PEP scepticism)
+In-reply-to:
+Sender: python-list-admin@python.org
+To: Python
+Errors-to: python-list-admin@python.org
+Message-id:
+MIME-version: 1.0
+Content-type: TEXT/PLAIN; charset=US-ASCII
+Precedence: bulk
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.5 (101270)
+List-Post:
+List-Subscribe: ,
+
+List-Unsubscribe: ,
+
+List-Archive:
+List-Help:
+List-Id: General discussion list for the Python programming language
+
+
+On 29 Jun 2001, David Bolen wrote:
+
+> Carsten Geckeler writes:
+>
+> > The problem which some people have with augmented assignment is not that
+> > they exist, but that they do not work as they expect (at least from the
+> > POV of some readers). I expect that
+> > ident op= expr
+> > works like
+> > ident = ident op expr
+> >
+> > At least that's what I'd have expectd comming from other programming
+> > languages.
+>
+> Of course, one interesting point is that while you may think the above
+> if coming from, say, C, what "ident = ident op expr" means in C is not
+> what "ident = ident op expr" means in Python.
+
+Yes, that's completely true. I can accept, that Python work differently
+in many cases. Actually I love Python's object stuff. That's something
+more natural that in many other languages. And I can accept, that objects
+(which are bound to different variable names) can be changed (like with
+l.extend).
+
+The point is not that Python differs from C (or other languages), but that
+the two statements above work differently. I can accept that, of course
+(well I have to, I thing ;) ). But, when I write the following three
+statements,
+ l = l + [3, 4]
+ l += [3, 4]
+ l.extend([3,4])
+it seems more logical to me, that the first two do the same than the last
+two. I know, of course, that the last two do the same. But anyway, the
+first two just _look_ more the same.
+
+> In C it has the result of changing data (in either case) that is
+> stored in a named location ident, in Python the long form just rebinds
+> the reference ident to a new object and doesn't touch the original
+> object. The short form can actually get closer to the C idiom if the
+> object is mutable.
+>
+> So I wonder if some of the confusion is people familiar with other
+> language's augmented assignment trying to extrapolate that into Python
+> and then running into the pre-existing differences in assignment
+> versus binding?
+
+No, that's at least no problem for me (see above).
+
+Cheers, Carsten
+--
+Carsten Geckeler
+
+
+--
+http://mail.python.org/mailman/listinfo/python-list
+
+--Boundary_(ID_MUSA353qRe9PeqtdeP14tg)--
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_05.txt b/src/mailman/bounces/tests/data/dsn_05.txt
new file mode 100644
index 000000000..73331578e
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_05.txt
@@ -0,0 +1,125 @@
+From VM Wed Mar 21 22:20:23 2001
+X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]
+ [nil "Thursday" "22" "March" "2001" "02:52:34" "+0100" "postmaster@relay.atlas.cz" "postmaster@relay.atlas.cz" nil "76" "Message delayed (pkocmid@atlas.cz)" "^From:" nil nil "3" nil nil nil nil nil]
+ nil)
+Return-Path:
+Delivered-To: bwarsaw@wooz.org
+Received: from digicool.com (host15.digitalcreations.d.subnet.rcn.com [208.59.6.15])
+ by mail.wooz.org (Postfix) with ESMTP id 97D9ED37AC
+ for ; Wed, 21 Mar 2001 21:34:33 -0500 (EST)
+Received: from
+ by digicool.com (CommuniGate Pro RULES 3.4)
+ with RULES id 1706776; Wed, 21 Mar 2001 21:39:26 -0500
+Received: from ns2.digicool.com ([216.164.72.2] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.4)
+ with ESMTP id 1706775 for barry@mail.digicool.com; Wed, 21 Mar 2001 21:39:26 -0500
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by ns2.digicool.com (8.9.3/8.9.3) with ESMTP id VAA12152
+ for ; Wed, 21 Mar 2001 21:36:03 -0500
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14fuxH-0002AK-00
+ for barry@digicool.com; Wed, 21 Mar 2001 21:36:03 -0500
+Received: from [195.119.187.242] (helo=cuk.atlas.cz)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14fuwk-00028x-00
+ for python-list-admin@python.org; Wed, 21 Mar 2001 21:35:31 -0500
+Message-Id:
+MIME-Version: 1.0
+Content-Type: multipart/report; report-type=delivery-status; boundary="45817/808/985225954/VOPmail/cuk.atlas.cz"
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+From: postmaster@relay.atlas.cz
+Sender: python-list-owner@python.org
+To: python-list-admin@python.org
+Subject: Message delayed (pkocmid@atlas.cz)
+Date: Thu, 22 Mar 2001 02:52:34 +0100
+X-Autogenerated: Mirror
+X-Mirrored-by:
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.3 (101270)
+
+--45817/808/985225954/VOPmail/cuk.atlas.cz
+Content-Type: text/plain
+
+Your message has been delayed and is still awaiting delivery
+to the following recipient(s):
+
+pkocmid@atlas.cz
+Message delayed
+
+
+Your message is delayed
+Message for domain atlas.cz delayed at relay.atlas.cz.
+Unable to deliver to domain for 12 hours.
+Will continue trying for 96 hours.
+No action is required on your part.
+Last attempt failed because:
+Can't connect to host
+
+
+--45817/808/985225954/VOPmail/cuk.atlas.cz
+Content-Type: message/delivery-status
+
+Reporting-MTA: dns; cuk.atlas.cz
+Received-From-MTA: dns; mail.python.org (unverified [63.102.49.29])
+Arrival-Date: Wed, 21 Mar 2001 15:08:54 +0100
+
+Final-Recipient: rfc822; pkocmid@atlas.cz
+Action: delayed
+Status: 4.4.1 (Persistent transient failure - routing/network: no answer from host)
+Will-Retry-Until: Mon, 26 Mar 2001 03:42:45 +0100
+
+--45817/808/985225954/VOPmail/cuk.atlas.cz
+Content-Type: message/rfc822-headers
+
+Received: from mail.python.org (unverified [63.102.49.29]) by cuk.atlas.cz
+ (Vircom SMTPRS 4.5.186) with ESMTP id for ;
+ Wed, 21 Mar 2001 15:08:54 +0100
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 14fjGM-0007PZ-00; Wed, 21 Mar 2001 09:06:58 -0500
+Path: news.baymountain.net!uunet!ash.uu.net!sac.uu.net!newsfeed.attap.net!enews.sgi.com!feeder.via.net!news.he.net!typhoon.aracnet.com!not-for-mail
+From: Daniel Klein
+Newsgroups: comp.lang.python
+Subject: Re: Pick Systems D3 Database
+Message-ID:
+References:
+X-Newsreader: Forte Agent 1.8/32.548
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+Lines: 25
+NNTP-Posting-Host: 216.99.212.46
+X-Complaints-To: news@aracnet.com
+X-Trace: typhoon.aracnet.com 985183028 216.99.212.46 (Wed, 21 Mar 2001 05:57:08 PST)
+NNTP-Posting-Date: Wed, 21 Mar 2001 05:57:08 PST
+Organization: Aracnet Internet
+Xref: news.baymountain.net comp.lang.python:93719
+To: python-list@python.org
+Sender: python-list-admin@python.org
+Errors-To: python-list-admin@python.org
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.3 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+Date: Wed, 21 Mar 2001 06:05:14 -0800
+
+--45817/808/985225954/VOPmail/cuk.atlas.cz--
+
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_06.txt b/src/mailman/bounces/tests/data/dsn_06.txt
new file mode 100644
index 000000000..22f69760a
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_06.txt
@@ -0,0 +1,122 @@
+From VM Mon Jul 2 04:05:06 2001
+X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]
+ [nil "Sunday" "1" "July" "2001" "16:07:50" "+0200" "Mail Delivery Service" "mailadm@thales-is.com" nil "72" "Delivery Status Notification (Mail Delivery Delayed)" "^From:" nil nil "7" nil nil nil nil nil]
+ nil)
+Return-Path:
+Delivered-To: barry@wooz.org
+Received: from digicool.com (unknown [63.100.190.15])
+ by mail.wooz.org (Postfix) with ESMTP id 1F5FED36EC
+ for ; Sun, 1 Jul 2001 10:07:00 -0400 (EDT)
+Received: from
+ by digicool.com (CommuniGate Pro RULES 3.4)
+ with RULES id 2125237; Sun, 01 Jul 2001 10:08:57 -0400
+Received: from ns2.digicool.com ([63.100.190.2] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.4)
+ with ESMTP id 2125244 for barry@mail.digicool.com; Sun, 01 Jul 2001 10:08:57 -0400
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by ns2.digicool.com (8.9.3/8.9.3) with ESMTP id KAA26383
+ for ; Sun, 1 Jul 2001 10:07:00 -0400
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15GhsL-0001Ey-00
+ for barry@digicool.com; Sun, 01 Jul 2001 10:07:01 -0400
+Received: from [195.101.39.226] (helo=gwsmtp.thomson-csf.com)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15GhrZ-0001D4-00
+ for python-list-admin@python.org; Sun, 01 Jul 2001 10:06:13 -0400
+Received: by gwsmtp.thomson-csf.com (NPlex 5.1.053) id 3B3CE20D00005041 for python-list-admin@python.org; Sun, 1 Jul 2001 16:07:50 +0200
+Message-ID: <3B3CE20D0000503F@gwsmtp.thomson-csf.com>
+MIME-Version: 1.0
+Content-Type: Multipart/Report; report-type=delivery-status; boundary="=========3B3CE20D00004815/gwsmtp.thomson-csf.com"
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+From: Mail Delivery Service
+Sender: python-list-owner@python.org
+To: python-list-admin@python.org
+Subject: Delivery Status Notification (Mail Delivery Delayed)
+Date: Sun, 1 Jul 2001 16:07:50 +0200
+X-Autogenerated: Mirror
+X-Mirrored-by:
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.5 (101270)
+
+This multi-part MIME message contains a Delivery Status Notification.
+If you can see this text, your mail client may not be able to understand MIME
+formatted messages or DSNs (see RFC 2045 through 2049 for general MIME
+information and RFC 1891 through 1894 for DSN specific information).
+
+--=========3B3CE20D00004815/gwsmtp.thomson-csf.com
+Content-Type: text/plain; charset=us-ascii
+
+ - This is only a notification about a delay in the delivery of your message.
+ - There is no need to resend your message at this time.
+ - The following recipients have not yet received your message:
+
+hao-nghi.au@fr.thalesgroup.com; Action: Delayed
+
+ - The server will continue trying for up to 21 hours.
+
+
+--=========3B3CE20D00004815/gwsmtp.thomson-csf.com
+Content-Type: Message/Delivery-Status
+
+Reporting-MTA: dns; gwsmtp.thomson-csf.com
+Received-from-MTA: dns; mail.python.org (63.102.49.29)
+Arrival-Date: Sun, 1 Jul 2001 13:07:44 +0200
+
+Final-Recipient: rfc822; hao-nghi.au@fr.thalesgroup.com
+Action: Delayed
+Status: 4.4.0 (other or undefined network or routing status)
+Will-Retry-Until: Mon, 2 Jul 2001 13:07:44 +0200
+
+--=========3B3CE20D00004815/gwsmtp.thomson-csf.com
+Content-Type: Text/RFC822-headers
+
+Return-Path:
+Received: from mail.python.org (63.102.49.29) by gwsmtp.thomson-csf.com (NPlex 5.1.053)
+ id 3B3CE20D00004815 for hao-nghi.au@fr.thalesgroup.com; Sun, 1 Jul 2001 13:07:44 +0200
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15Gf3C-0005ft-00; Sun, 01 Jul 2001 07:06:02 -0400
+Path: news.baymountain.net!uunet!ash.uu.net!dca.uu.net!feed2.onemain.com!feed1.onemain.com!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!hahn.informatik.hu-berlin.de!not-for-mail
+From: Martin von Loewis
+Newsgroups: comp.lang.python
+Subject: Re: GCC 3.0, Standard ABI & C++/Python Integration
+Organization: Humboldt University Berlin, Department of Computer Science
+Lines: 8
+Message-ID:
+References:
+NNTP-Posting-Host: pandora.informatik.hu-berlin.de
+X-Trace: hahn.informatik.hu-berlin.de 993984634 26083 141.20.23.176 (1 Jul 2001 10:50:34 GMT)
+X-Complaints-To: news@hahn.informatik.hu-berlin.de
+NNTP-Posting-Date: 1 Jul 2001 10:50:34 GMT
+X-Newsreader: Gnus v5.7/Emacs 20.7
+Xref: news.baymountain.net comp.lang.python:110477
+To: python-list@python.org
+Sender: python-list-admin@python.org
+Errors-To: python-list-admin@python.org
+X-BeenThere: python-list@python.org
+X-Mailman-Version: 2.0.5 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: General discussion list for the Python programming language
+List-Unsubscribe: ,
+
+List-Archive:
+Date: 01 Jul 2001 12:50:34 +0200
+
+
+--=========3B3CE20D00004815/gwsmtp.thomson-csf.com--
+
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_07.txt b/src/mailman/bounces/tests/data/dsn_07.txt
new file mode 100644
index 000000000..2e5a0e5d8
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_07.txt
@@ -0,0 +1,121 @@
+From VM Wed Aug 1 17:56:11 2001
+X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil]
+ [nil "Thursday" "2" "August" "2001" "08:02:07" "+1200" "postmaster@Parliament.govt.nz" "postmaster@Parliament.govt.nz" nil "73" "Message delayed (david.farrar@parliament.govt.nz)" "^From:" "mailman-users-admin@python.org" "mailman-users-admin@python.org" "8" nil nil nil nil nil]
+ nil)
+Return-Path:
+Delivered-To: barry@wooz.org
+Received: from digicool.com (unknown [63.100.190.15])
+ by mail.wooz.org (Postfix) with ESMTP id D431ED35F0
+ for ; Wed, 1 Aug 2001 16:26:59 -0400 (EDT)
+Received: from
+ by digicool.com (CommuniGate Pro RULES 3.4)
+ with RULES id 2462291; Wed, 01 Aug 2001 16:27:02 -0400
+Received: from smtp.zope.com ([63.100.190.10] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.4)
+ with ESMTP id 2462289 for barry@mail.zope.com; Wed, 01 Aug 2001 16:27:02 -0400
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by smtp.zope.com (8.11.2/8.11.2) with ESMTP id f71KR2X19854
+ for ; Wed, 1 Aug 2001 16:27:02 -0400
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15S2a4-0003D5-00; Wed, 01 Aug 2001 16:27:00 -0400
+Received: from [203.97.232.93] (helo=ns1.parliament.govt.nz)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15S2Z4-0003Bh-00
+ for mailman-users-admin@python.org; Wed, 01 Aug 2001 16:25:59 -0400
+Message-Id:
+MIME-Version: 1.0
+Content-Type: multipart/report; report-type=delivery-status; boundary="23/89/996696127/MAILsweeper/ns1.parliament.govt.nz"
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: Mailman mailing list management users
+List-Unsubscribe: ,
+
+List-Archive:
+From: postmaster@Parliament.govt.nz
+Sender: mailman-users-owner@python.org
+To: mailman-users-admin@python.org
+Subject: Message delayed (david.farrar@parliament.govt.nz)
+Date: Thu, 2 Aug 2001 08:02:07 +1200
+X-Autogenerated: Mirror
+X-Mirrored-by:
+X-BeenThere: mailman-users@python.org
+X-Mailman-Version: 2.0.6 (101270)
+
+--23/89/996696127/MAILsweeper/ns1.parliament.govt.nz
+Content-Type: text/plain
+
+Your message has been delayed and is still awaiting delivery
+to the following recipient(s):
+
+david.farrar@Parliament.govt.nz
+(Was addressed to david.farrar@parliament.govt.nz)
+Message delayed
+
+
+Your message is delayed
+Message for domain parliament.govt.nz delayed at Parliament.govt.nz.
+Unable to deliver to domain for 6 hours.
+Will continue trying for 66 hours.
+No action is required on your part.
+Last attempt failed because:
+Can't connect to host
+
+
+--23/89/996696127/MAILsweeper/ns1.parliament.govt.nz
+Content-Type: message/delivery-status
+
+Reporting-MTA: dns; ns1.parliament.govt.nz
+Received-From-MTA: dns; mail.python.org (unverified [63.102.49.29])
+Arrival-Date: Thu, 2 Aug 2001 02:00:22 +1200
+
+Final-Recipient: rfc822; david.farrar@parliament.govt.nz
+Action: delayed
+Status: 4.4.1 (Persistent transient failure - routing/network: no answer from host)
+Will-Retry-Until: Sun, 5 Aug 2001 02:02:05 +1200
+
+--23/89/996696127/MAILsweeper/ns1.parliament.govt.nz
+Content-Type: message/rfc822-headers
+
+Received: from mail.python.org (unverified) by ns1.parliament.govt.nz
+ (Content Technologies SMTPRS 4.1.5) with ESMTP id for ;
+ Thu, 2 Aug 2001 02:00:22 +1200
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15RvjO-00089v-00; Wed, 01 Aug 2001 09:08:10 -0400
+Received: from [144.122.169.16] (helo=robot.metu.edu.tr)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15Rvie-00086Z-00
+ for mailman-users@python.org; Wed, 01 Aug 2001 09:07:26 -0400
+Received: from localhost (ceyhun@localhost)
+ by robot.metu.edu.tr (8.11.2/8.11.2) with ESMTP id f71DBH312336
+ for ; Wed, 1 Aug 2001 16:11:18 +0300
+From:
+To:
+Message-ID:
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+Subject: [Mailman-Users] Hi there,
+Sender: mailman-users-admin@python.org
+Errors-To: mailman-users-admin@python.org
+X-BeenThere: mailman-users@python.org
+X-Mailman-Version: 2.0.6 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: Mailman mailing list management users
+List-Unsubscribe: ,
+
+List-Archive:
+Date: Wed, 1 Aug 2001 16:11:17 +0300 (EEST)
+X-Mime-Type: Plain
+
+--23/89/996696127/MAILsweeper/ns1.parliament.govt.nz--
+
+
+
diff --git a/src/mailman/bounces/tests/data/dsn_08.txt b/src/mailman/bounces/tests/data/dsn_08.txt
new file mode 100644
index 000000000..8d4d3b8b6
--- /dev/null
+++ b/src/mailman/bounces/tests/data/dsn_08.txt
@@ -0,0 +1,131 @@
+Return-Path:
+Received: from smtp.zope.com ([63.100.190.10] verified)
+ by digicool.com (CommuniGate Pro SMTP 3.4)
+ with ESMTP id 2769384 for mj@mail.zope.com; Thu, 04 Oct 2001 04:48:48 -0400
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by smtp.zope.com (8.11.2/8.11.2) with ESMTP id f948k0X28835
+ for ; Thu, 4 Oct 2001 04:46:00 -0400
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15p48n-0001n2-00
+ for mj@zope.com; Thu, 04 Oct 2001 04:46:01 -0400
+Received: from [212.84.234.29] (helo=daswort.innominate.com)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15p48K-0001ku-00
+ for zope-admin@zope.org; Thu, 04 Oct 2001 04:45:32 -0400
+Received: from mate.bln.innominate.de (cerberus.berlin.innominate.de [212.84.234.251])
+ by daswort.innominate.com (Postfix) with ESMTP id BC8F2272F7
+ for ; Thu, 4 Oct 2001 09:45:26 +0000 (GMT)
+Received: by mate.bln.innominate.de (Postfix)
+ id 27AD62CB3A; Thu, 4 Oct 2001 10:45:28 +0200 (CEST)
+Date: Thu, 4 Oct 2001 10:45:28 +0200 (CEST)
+From: MAILER-DAEMON@innominate.de (Mail Delivery System)
+Subject: Delayed Mail (still being retried)
+To: zope-admin@zope.org
+MIME-Version: 1.0
+Content-Type: multipart/report; report-type=delivery-status;
+ boundary="A216D2D16B.1002185128/mate.bln.innominate.de"
+Message-Id: <20011004084528.27AD62CB3A@mate.bln.innominate.de>
+Sender: zope-owner@zope.org
+Errors-To: zope-owner@zope.org
+X-BeenThere: zope@zope.org
+X-Mailman-Version: 2.0.6 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: Users of the Z Object Publishing Environment
+List-Unsubscribe: ,
+
+List-Archive:
+
+This is a MIME-encapsulated message.
+
+--A216D2D16B.1002185128/mate.bln.innominate.de
+Content-Description: Notification
+Content-Type: text/plain
+
+This is the Postfix program at host mate.bln.innominate.de.
+
+####################################################################
+# THIS IS A WARNING ONLY. YOU DO NOT NEED TO RESEND YOUR MESSAGE. #
+####################################################################
+
+Your message could not be delivered for 0.2 hours.
+It will be retried until it is 5.0 days old.
+
+For further assistance, please send mail to
+
+ The Postfix program
+
+: temporary failure. Command
+ output: avpcheck: unable to connect to avp daemon: Connection refused
+
+--A216D2D16B.1002185128/mate.bln.innominate.de
+Content-Description: Delivery error report
+Content-Type: message/delivery-status
+
+Reporting-MTA: dns; mate.bln.innominate.de
+Arrival-Date: Thu, 4 Oct 2001 10:20:46 +0200 (CEST)
+
+Final-Recipient: rfc822; news-list.zope@localhost.bln.innominate.de
+Action: delayed
+Status: 4.0.0
+Diagnostic-Code: X-Postfix; temporary failure. Command output: avpcheck: unable
+ to connect to avp daemon: Connection refused
+Will-Retry-Until: Tue, 9 Oct 2001 10:20:46 +0200 (CEST)
+
+--A216D2D16B.1002185128/mate.bln.innominate.de
+Content-Description: Undelivered Message Headers
+Content-Type: text/rfc822-headers
+
+Received: from daswort.innominate.com (daswort.innominate.com [212.84.234.29])
+ by mate.bln.innominate.de (Postfix) with ESMTP id A216D2D16B
+ for ; Thu, 4 Oct 2001 10:20:46 +0200 (CEST)
+Received: from mail.python.org (mail.python.org [63.102.49.29])
+ by daswort.innominate.com (Postfix) with ESMTP id 8106A284DD
+ for ; Thu, 4 Oct 2001 04:42:06 +0000 (GMT)
+Received: from localhost.localdomain ([127.0.0.1] helo=mail.python.org)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15ozMj-000236-00; Wed, 03 Oct 2001 23:40:05 -0400
+Received: from [65.32.1.43] (helo=smtp-server6.tampabay.rr.com)
+ by mail.python.org with esmtp (Exim 3.21 #1)
+ id 15ozMQ-00021c-00
+ for zope@zope.org; Wed, 03 Oct 2001 23:39:46 -0400
+Received: from tlc2 (242850hfc162.tampabay.rr.com [24.28.50.162])
+ by smtp-server6.tampabay.rr.com (8.11.2/8.11.2) with SMTP id f943dcd28305;
+ Wed, 3 Oct 2001 23:39:42 -0400 (EDT)
+From: "Trevor Toenjes"
+To: "Martijn Pieters" ,
+ "Trevor Toenjes"
+Cc:
+Subject: RE: [Zope] what is error_message and how do I alter it??
+Message-ID:
+MIME-Version: 1.0
+Content-Type: text/plain;
+ charset="iso-8859-1"
+Content-Transfer-Encoding: 7bit
+X-Priority: 3 (Normal)
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)
+Importance: Normal
+X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
+In-Reply-To: <20011003223154.D27261@zope.com>
+Sender: zope-admin@zope.org
+Errors-To: zope-admin@zope.org
+X-BeenThere: zope@zope.org
+X-Mailman-Version: 2.0.6 (101270)
+Precedence: bulk
+List-Help:
+List-Post:
+List-Subscribe: ,
+
+List-Id: Users of the Z Object Publishing Environment