(yes, I'm chatting with myself again)
Here's a patch that catches things of this form. If anyone has any comments, I'd be thrilled to hear them.
*** Netscape.py.orig Fri Jul 28 21:23:23 2000 --- Netscape.py Fri Jul 28 21:46:45 2000
*** 40,46 **** --- 40,53 ---- r'(?P<reply>please reply to)?.*<(?P<addr>[^>]*)>', re.IGNORECASE)
fatalre = re.compile(
r'The following addresses had permanent fatal errors',
addrre = re.compile(
def process(msg): # Sigh. Some show NMS 3.6's show
*** 79,85 **** return None plainmsg = msg # Did we find a text/plain part? ! if not plainmsg: return None # Total guesswork, based on captured examples... addrs =  --- 86,92 ---- return None plainmsg = msg # Did we find a text/plain part? ! if plainmsg == None: return None # Total guesswork, based on captured examples... addrs = 
*** 99,102 **** --- 106,118 ---- mo = acre.search(line) if mo and not mo.group('reply'): addrs.append(mo.group('addr'))
mo = fatalre.search(line)
line = plainmsg.fp.readline()
if not line:
mo = addrre.search(line)
addrs.append(mo.group('addr')) return addrs or None
For a while there, I had several weeks of "no unhandled bounces". Now I'm getting a lot that aren't being caught, and I'm going to go start diagnosing them.
Barry, or anyone, do you have anything other than the code itself to help understand the various sorts of bounces that are caught by the various Bouncer modules? (i.e. samples or other explanatory docs?) I expect the answer to be "no", but it doesn't hurt to ask.
So now I know something about running pdb, and I've identified some things about one of the messages that bounces:
It looks like DSN should be catching it, but it has no '*recipient' headers in its message/delivery-status section; the only mention of the bouncing address occurs in the text/plain section above it. It's from mx6.boston.juno.com, and I can't find anything about it that gives a clue as to what MTA might be generating it.
It also looks vaguely like Netscape.py might be a better one to hack, since it embodies the "no recipient" part. I'll be trying to do that.
here's a sample excerpt:
This is a MIME-encapsulated message
--AAA6Z5S39A5QX2T2/mx6.boston.juno.com <<< first part: text/plain The original message was received at Tue, 25 Jul 2000 12:41:35 -0400 (EST) from email@example.com
----- The following addresses had permanent fatal errors ----- firstname.lastname@example.org <<< only address
----- Transcript of session follows ----- 550 Service unavailable
--AAA6Z5S39A5QX2T2/mx6.boston.juno.com Content-Type: message/delivery-status <<< no recipient here
Reporting-MTA: mx6.boston.juno.com Arrival-Date: Tue, 25 Jul 2000 12:41:35 -0400 (EST)
Action: failed last-Attempt-Date: Tue, 25 Jul 2000 12:41:35 -0400 (EST)
--AAA6Z5S39A5QX2T2/mx6.boston.juno.com Content-Type: message/rfc822 <<< bounced msg here
Received: from we-24-30-117-227.we.mediaone.net
Mailman-Developers mailing list Mailman-Developers@python.org http://www.python.org/mailman/listinfo/mailman-developers