Just Answer the Question, Dammit!

I have a bunch of mailing lists that I maintain, and which operate using Mailman software.

I also have a person on a bunch of my lists whose ISP routinely will stop accepting email for several hours a day. The ISP that this ISP gets its email from sends these “your mail hasn’t been delivered for four hours, I’ll keep trying for 5 days” messages which were common back in the days of UUCP email, but pretty stupid now a days. Unfortunately Mailman treats these messages as bounces, even though they’re not. And if Mailman sees enough bounces, you get bounced off the mailing list.

The person in question doesn’t want to change to an ISP that is more reliable, for reasons that are really none of my business. The ISP that sends the warning adamantly refuses to stop sending them, saying they’re important. And I don’t want this person to drop off the lists – she’s a very positive contributor. So thus my dillemma.

I wanted to modify Mailman so that it would recognize these warnings as warnings, rather than bounces. But unfortunately I don’t know Python. I know lots of other computer languages, so I think I can figure out what’s going on, but I don’t know enough to start adding to the code.

As far as I can tell, the code that determines that this is a bounce is in Mailman/Bouncers/Postfix.py, which has a search string that matches real Postfix bounce messages as well as these warnings. I thought I’d ask the mailman-developers list for an idea how to modify this file to only report a bounce if it had the string it was already looking for BUT NOT IF IT HAD THIS OTHER STRING. Not a big deal, and if it were C, C++, Java, Perl, or any of a dozen other languages I could have done it myself in about 30 seconds.

But instead of answering the question, I got a series of long diatribes about how it would be too hard to match all the possible warnings out there (which I wasn’t asking for) or how it is “fixing the wrong problem” and I should either demand that my user changes to a different ISP or kick her off. Most of these diatribes seemed to assume that Mailman is some incredibly pristine work of beauty and putting in one special case would ruin it for good. I referred to them acting as if I’d asked for a magic marker to draw a mustache on the Mona Lisa. But Mailman isn’t like that – it’s got dozens if not hundreds of special case tests to catch all the different bounce messages out there. And the BouncersAPI even has provision for silently ignoring warnings instead of treating them like bounces – if I’m reading it right, you return a class called “Stop” instead of an email address. So I don’t know why these dickheads are so worried that there might be one more special case that works right. Not to mention that if even one of them had taken the same amount of time helping me as they’d taken to criticize me, the problem would be fixed already.

So I’ve given up on the mailman-developers mailing list. Fuck ’em, I’m going to buy a Python book. And I’m not going to send in the fix as a patch.

One thought on “Just Answer the Question, Dammit!”

  1. Well … *has a look*

    You’d probably define

    nbcre = re.compile(r'regex that matches the 4 hour warning goes here', re,IGNORECASE)

    up the top (under [pra]cre)

    Then in findaddr(msg), add

    elif state == 1 and nbcre.match(line):
    return Stop

    This would only work if the 4 hour warning line came after the initial “failed delivery” line, but the logic should be easy enough to handle.

    BTW, good luck with learning Python, it’s one of the better languages out there (idiots on the Mailman list aside). The regex handling can be quite subtle though (watch out for the difference between match and search).

Comments are closed.