Great way to wrap up a holiday: Agreed to take on a new Birdhouse client – a mid-size company who’s had a horrible email experience with their previous “top tier” provider. They had a dozen or so addresses; could we take them on? No problem. The old host had been storing a couple weeks worth of their mail, but there was no way to get it through to the mail exchanger for delivery. The old host agreed to relay it all to Birdhouse for processing.
That’s when things turned ugly.
Turns out the previous host didn’t have the basic common sense to discard mail to unknown addresses on the domain (it hasn’t been feasible to accept mail for unknown names, like email@example.com) for years. But they were not only accepting it all; they relayed it ALL to Birdhouse.
300,000 messages worth, 95% of which was theoretically discardable.
Unfortunately, discarding crap mail isn’t trivial when parsing a queue that large. Needless to say, things came to a grinding halt. Complicating matters was the fact that Birdhouse actually utilizes two mail queues: One for MailScanner, which pre-processes spam, and another for Exim, which is the actual mail transfer agent. The MailScanner queue was so large we couldn’t even get things out into the Exim queue. Exim documentation assumes a single queue, and MailScanner doesn’t offer the same range of queue management options that Exim does.
Which meant I got to script a solution, examining each messages on the pre-que to determine whether it was destined for a valid or invalid address, and dropping it if invalid.
The script is running now, but will take a while. All spectacularly unpleasant. Once again, wanting to skewer a spammer or two and painfully aware of how much of my time is consumed by fighting bad guys.
Progress updates on the Birdhouse System Status page.